Sitemap
Sathish Vadivel

Sathish Vadivel

Software Developer @ DXC Luxoft

Filtering Data with Multiple Conditions in KDB+/q

5 min readMay 9, 2026
Press enter or click to view image in full size

Filtering data efficiently is one of the core skills in kdb+/q. While the where clause looks simple, it behaves differently depending on the data type—especially for symbol and char.

  • Symbol data type
  • Char data type
  • Numeric data type (int, float, short, long)
  • Date data type

Before jumping into filters, let’s define a simple table:

/ Sample table
table: ([]
id:1+til 7;
name:`sam`ram`eno`sam`ram`eno`lee;
Place:7?("Chennai";"Bengalore";"Delhi";"Pune";"Hyderabad");
date:2025.04.01+til 7
);

q)table
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05
6 eno "Bengalore" 2025.04.06
7 lee "Delhi" 2025.04.07
  • id → numeric type (long)
  • name → symbol type
  • place → char type (each value is a single character)
  • date → date type
  1. Filtering Symbol Data Type

✅Single Value Condition:

To filter a single symbol value:

/ method-1 
q)select from table where name = `sam
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
4 sam "Bengalore" 2025.04.04

/ method-2
q)select from table where name in `sam
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
4 sam "Bengalore" 2025.04.04

/ method-3
q)select from table where name like "sam"
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
4 sam "Bengalore" 2025.04.04

Note: The like operator can also be used with symbol columns to filter data.

✅Multiple Value Condition:

To filter for multiple symbols:

/ method-1
q)select from table where name in `sam`ram
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05

/ method-2
q)select from table where (|/)(name = `sam; name = `ram)
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05

/ method-3
q)select from table where (name like "sam") or (name like "ram")
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05

/ method-4
q)select from table where (|/)(name like "sam"; name like "ram")
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05

/ method-5
q)select from table where any name like/:("sam";"ram")
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05

2. Filtering Char Data Type

Get Sathish Vadivel’s stories in your inbox

Join Medium for free to get updates from this writer.

✅Single Value Condition:

To filter a single char value:

/ method-1
q)select from table where Place like "Delhi"
id name Place date
--------------------------
3 eno "Delhi" 2025.04.03
5 ram "Delhi" 2025.04.05
7 lee "Delhi" 2025.04.07

/ method-2
q)select from table where Place in enlist "Delhi"
id name Place date
--------------------------
3 eno "Delhi" 2025.04.03
5 ram "Delhi" 2025.04.05
7 lee "Delhi" 2025.04Filter.07

✅Multiple Value Condition:

To filter for multiple char :

/ method-1
q)select from table where Place in ("Delhi";"Bengalore")
id name Place date
------------------------------
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05
6 eno "Bengalore" 2025.04.06
7 lee "Delhi" 2025.04.07

/ method-2
q)select from table where (Place like "Delhi") or (Place like "Bengalore")
id name Place date
------------------------------
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05
6 eno "Bengalore" 2025.04.06
7 lee "Delhi" 2025.04.07

/ method-3
q)select from table where (|/)(Place like "Delhi"; Place like "Bengalore")
id name Place date
------------------------------
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05
6 eno "Bengalore" 2025.04.06
7 lee "Delhi" 2025.04.07

/ method-4
q)select from table where any Place like/:("Delhi";"Bengalore")
id name Place date
------------------------------
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04
5 ram "Delhi" 2025.04.05
6 eno "Bengalore" 2025.04.06
7 lee "Delhi" 2025.04.07

3. Filtering Numeric Data Type

✅Single Value Condition:

To filter a single Numeric value:

/ method-1
q)select from table where id = 2
id name Place date
----------------------------
2 ram "Chennai" 2025.04.02

/ method-2
q)select from table where id in 2
id name Place date
----------------------------
2 ram "Chennai" 2025.04.02

✅Multiple Value Condition:

To filter for multiple numeric:

/ method-1
q)select from table where id in 2 3 4
id name Place date
------------------------------
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04

/ method-2
q)select from table where id within 2 4
id name Place date
------------------------------
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04

/ method-3
q)select from table where (id=2) or (id=3) or (id=4)
id name Place date
------------------------------
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04

/ method-4
q)select from table where (|/)(id=2; id=3; id=4)
id name Place date
------------------------------
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03
4 sam "Bengalore" 2025.04.04

4. Filtering Date Data Type

✅Single Value Condition:

To filter a single Date value:

/ method-1
q)select from table where date = 2025.04.01
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01

/ method-2
q)select from table where date in 2025.04.01
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01

✅Multiple Value Condition:

To filter for multiple date:

/ method-1
q)select from table where date in 2025.04.01 2025.04.02 2025.04.03
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03

/ method-2
q)select from table where date within 2025.04.01 2025.04.03
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03

/ method-3
q)select from table where (date = 2025.04.01) or (date = 2025.04.02) or (date = 2025.04.03)
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03

/ method-4
q)select from table where (|/)(date = 2025.04.01; date = 2025.04.02; date = 2025.04.03)
id name Place date
------------------------------
1 sam "Hyderabad" 2025.04.01
2 ram "Chennai" 2025.04.02
3 eno "Delhi" 2025.04.03

Filtering data in KDB+/q becomes much more flexible once you understand how different data types behave with the where clause. As we explored, symbol, char, numeric, and date columns each support multiple filtering approaches such as =, in, within, like, logical or, and even functional forms.

While there are many ways to achieve the same result, choosing the right approach improves readability, maintainability, and query performance. In most real-world scenarios, operators like in and within provide the cleanest and most scalable solutions for handling multiple conditions in KDB+/q.

By mastering these filtering techniques, you can write more efficient queries, simplify data analysis tasks, and work more confidently with large-scale time-series datasets in KDB+/q.

--

--

Sathish Vadivel
Sathish Vadivel

Written by Sathish Vadivel

Software Developer @ DXC Luxoft