J Jira

How to use advanced JQL queries on Jira

advanced 12 min read Updated 2026-03-18
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

  • Basic understanding of Jira issues and fields
  • Familiarity with Jira's search interface
  • Knowledge of boolean logic operators
  • Understanding of Jira project structure and issue types

Step-by-Step Instructions

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.
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()).
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.
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".
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.
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.
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.
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.
Monitor query execution time in the bottom-left corner of search results and optimize slow queries by restructuring conditions.

Common Issues & 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.

Prices mentioned in this guide are pulled from current plan data and may change. Always verify on the official Jira website before purchasing.