TemperStack
Advanced12 min readUpdated Mar 18, 2026

How to use advanced JQL queries on Jira

Quick Answer

Advanced JQL (Jira Query Language) queries allow you to create complex searches using operators, functions, and field combinations to filter issues precisely. Access JQL through the Issues search with advanced mode, then build queries using syntax like project = KEY AND assignee = currentUser() OR status CHANGED AFTER -7d.

Prerequisites

  1. Basic understanding of Jira issues and fields
  2. Familiarity with Jira's search interface
  3. Knowledge of boolean logic operators
  4. Understanding of Jira project structure and issue types
1

Access JQL Advanced Search

Navigate to Issues in the main menu and click Search for Issues. Click the Advanced link in the top-right corner of the search interface to switch from basic to JQL mode. The interface will change to show a text input field where you can enter JQL queries directly.
Tip
Use Ctrl+Space in the JQL editor to trigger autocomplete suggestions for fields, operators, and functions.
2

Master JQL Operators and Syntax

Learn essential JQL operators: = (equals), != (not equals), IN (matches any value in list), NOT IN (excludes values), ~ (contains text), !~ (does not contain), IS EMPTY and IS NOT EMPTY. Combine conditions using AND, OR, and NOT. Use parentheses to group conditions: project = DEMO AND (status = "In Progress" OR assignee = currentUser()).
Tip
Always wrap multi-word values in double quotes, like "In Progress" or "John Smith".
3

Utilize JQL Functions

Implement powerful JQL functions: currentUser() for current logged-in user, membersOf("group-name") for group members, now() for current date/time, startOfDay(), endOfWeek() for date ranges. Use issueFunction for complex searches like issueFunction in linkedIssuesOf("project = DEMO"). Combine with date arithmetic: created >= -30d for issues created in last 30 days.
Tip
Use negative values with date functions like -7d, -2w, -1M to search backwards in time.
4

Build Complex Date and Time Queries

Create sophisticated date queries using CHANGED operator: status CHANGED FROM "To Do" TO "In Progress" DURING (-1w, now()). Use WAS for historical values: assignee WAS "john.doe" BEFORE -7d. Combine date functions: created >= startOfMonth() AND resolved <= endOfMonth(). Search by specific date ranges: updated >= "2026-01-01" AND updated <= "2026-01-31".
Tip
Use DURING operator for time ranges: field CHANGED DURING (startDate, endDate) to track changes within specific periods.
5

Create Field-Specific Advanced Queries

Query custom fields using their exact names or IDs: cf[10001] = "High Priority" or "Story Points" >= 5. Search text fields with wildcards: summary ~ "bug*" or description ~ "performance AND slow". Use ORDER BY to sort results: project = DEMO ORDER BY created DESC, priority ASC. Query sub-tasks: parent = DEMO-123 or epic relationships: "Epic Link" = DEMO-456.
Tip
Find custom field IDs by hovering over field names in the JQL autocomplete or checking the field configuration.
6

Implement Subqueries and Advanced Logic

Use subqueries with issueFunction: project = DEMO AND issueFunction in subtasksOf("status = Done"). Create complex boolean logic: (project = DEMO OR project = TEST) AND assignee != currentUser() AND status NOT IN (Done, Cancelled). Query linked issues: issue in linkedIssues(DEMO-123, "blocks"). Use EMPTY and NULL to find incomplete data: fixVersion IS EMPTY OR "Story Points" IS NULL.
Tip
Test complex queries step by step, adding one condition at a time to ensure each part works correctly.
7

Save and Share Advanced Queries

Click Save as button after creating your query to save it as a filter. Enter a descriptive name and choose whether to share with others. Access saved filters from Issues > My Filters or the Filters dropdown in search. Create filter subscriptions by opening a saved filter and clicking Details > New Subscription to receive regular email updates with query results.
Tip
Use descriptive names for saved filters and organize them in folders for better management across teams.
8

Optimize Query Performance

Improve query performance by placing most restrictive conditions first: project = DEMO AND created >= -30d AND assignee = currentUser(). Avoid using != and NOT IN with large datasets when possible. Use specific project keys instead of searching across all projects. Limit text searches with ~ operator to specific fields rather than searching all text fields.
Tip
Monitor query execution time in the bottom-left corner of search results and optimize slow queries by restructuring conditions.

Troubleshooting

JQL syntax error or query not returning expected results
Check for typos in field names, ensure proper quote usage around multi-word values, and verify operator syntax. Use the JQL autocomplete feature (Ctrl+Space) to validate field names and functions. Test individual parts of complex queries separately.
Query runs too slowly or times out
Simplify the query by adding more restrictive conditions early, especially project filters. Avoid using != and NOT IN operators on large datasets. Contact your Jira administrator about indexing if performance issues persist across multiple queries.
Custom fields not appearing in JQL autocomplete
Verify the custom field is available in your project context and you have permission to view it. Use the field ID format cf[10001] if the field name doesn't work. Check with your Jira administrator about field configuration and screen associations.
Date functions returning unexpected results
Ensure you're using the correct date format and time zone settings. Check your Jira profile timezone settings under Profile > Personal Settings. Use specific date formats like "2026-01-01" instead of relative dates when precision is important.

Related Guides

More Jira Tutorials

Other Tool Tutorials

Ready to get started with Jira?

Put this tutorial into practice. Visit Jira and follow the steps above.

Visit Jira