JQL Query Builder
JQL Query Builder
Expert assistance for constructing JQL (Jira Query Language) queries to search and filter Jira issues efficiently.
When to Use This Skill
- User wants to search for specific issues
- User needs to filter issues by multiple criteria
- User mentions JQL or queries
- User wants to find bugs, features, or tasks matching certain conditions
- User needs help understanding JQL syntax
JQL Basics
Field Operators
| Operator | Description | Example |
|---|---|---|
= |
Equals | status = "In Progress" |
!= |
Not equals | priority != Low |
>, < |
Greater/less than | created > -7d |
>=, <= |
Greater/less or equal | priority >= High |
~ |
Contains text | summary ~ "login" |
IN |
Matches any value | status IN (Open, "In Progress") |
NOT IN |
Doesn't match | priority NOT IN (Low) |
IS EMPTY |
Field is empty | assignee IS EMPTY |
IS NOT EMPTY |
Field has value | dueDate IS NOT EMPTY |
Common Fields
- project: Project key (e.g.,
project = PROJ) - status: Issue status (e.g.,
status = "In Progress") - priority: Priority level (e.g.,
priority = High) - assignee: Assigned user (e.g.,
assignee = currentUser()) - reporter: Who created it (e.g.,
reporter = currentUser()) - created: Creation date (e.g.,
created >= -30d) - updated: Last update (e.g.,
updated > -7d) - type: Issue type (e.g.,
type = Bug) - labels: Labels (e.g.,
labels = urgent) - summary: Title text (e.g.,
summary ~ "authentication") - description: Description text (e.g.,
description ~ "error")
Date Functions
-1d,-7d,-30d: Relative dates (days ago)-1w,-4w: Weeks agostartOfDay(),endOfDay(): Day boundariesstartOfWeek(),endOfWeek(): Week boundaries
User Functions
currentUser(): The logged-in usermembersOf("group-name"): Users in a group
Logical Operators
AND: Both conditions must be trueOR: Either condition must be trueNOT: Negate a condition
Common Query Patterns
My Open Issues
assignee = currentUser() AND status != Done
Recently Updated Bugs
type = Bug AND updated >= -7d ORDER BY updated DESC
High Priority Unassigned Issues
priority = High AND assignee IS EMPTY AND status != Done
Issues Created This Sprint
project = PROJ AND created >= -14d AND type IN (Story, Task)
Overdue Issues
dueDate < now() AND status != Done ORDER BY dueDate ASC
Issues Mentioning Specific Feature
(summary ~ "authentication" OR description ~ "authentication") AND status != Done
Team's Work This Week
assignee IN membersOf("dev-team") AND updated >= startOfWeek()
Epics Without Stories
type = Epic AND issueFunction NOT IN linkedIssuesOf("type = Story")
Building Complex Queries
Step-by-Step Approach
-
Start with project:
project = PROJ -
Add status filter:
project = PROJ AND status IN ("To Do", "In Progress") -
Add assignee:
project = PROJ AND status IN ("To Do", "In Progress") AND assignee = currentUser() -
Add time filter:
project = PROJ AND status IN ("To Do", "In Progress") AND assignee = currentUser() AND created >= -30d -
Add sorting:
project = PROJ AND status IN ("To Do", "In Progress") AND assignee = currentUser() AND created >= -30d ORDER BY priority DESC, updated DESC
Optimization Tips
Use Specific Fields
❌ Slow: text ~ "bug"
✅ Fast: summary ~ "bug" OR description ~ "bug"
Limit Date Ranges
❌ Slow: created <= now()
✅ Fast: created >= -90d
Use IN Instead of Multiple OR
❌ Verbose: status = "To Do" OR status = "In Progress" OR status = "Review"
✅ Clean: status IN ("To Do", "In Progress", "Review")
Order Matters for AND
Put most restrictive conditions first:
assignee = currentUser() AND status != Done AND type = Bug
Testing Queries
When I build a query for you, I'll:
- Explain the logic: Break down what each part does
- Test it: Use
/jira-searchto verify results - Refine: Adjust based on results
- Optimize: Suggest improvements for performance
Common Use Cases
Sprint Planning
project = PROJ AND status = "To Do" AND sprint IS EMPTY ORDER BY priority DESC
Bug Triage
type = Bug AND status = "To Do" AND priority IS EMPTY ORDER BY created DESC
Release Readiness
fixVersion = "v2.0" AND status != Done
Stale Issues
status = "In Progress" AND updated <= -30d
Blocked Work
status = Blocked OR labels = blocked ORDER BY priority DESC
Advanced Patterns
Find Issues Without Estimates
project = PROJ AND "Story Points" IS EMPTY AND type IN (Story, Task)
Parent Issues with Incomplete Subtasks
issueFunction IN parentsOf("status != Done")
Issues Mentioned in Comments
comment ~ "needs review"
Cross-Project Search
project IN (PROJ1, PROJ2, PROJ3) AND assignee = currentUser()
How I'll Help
When you need a JQL query, I will:
- Understand your requirements: What are you trying to find?
- Build the query: Construct JQL step-by-step
- Explain each part: Help you understand the syntax
- Test it: Run the query using
/jira-search - Refine: Adjust based on results
- Save for reuse: Document the query for future use
Example Interaction
You: "Find all high-priority bugs assigned to me that were updated in the last week"
Me: "I'll build a JQL query for that:
type = Bug AND priority = High AND assignee = currentUser() AND updated >= -7d ORDER BY updated DESC
Breaking it down:
type = Bug: Only bugspriority = High: High priority onlyassignee = currentUser(): Assigned to youupdated >= -7d: Updated in last 7 daysORDER BY updated DESC: Newest first
Let me search for these issues using /jira-search..."
References
For more JQL details:
- Jira Query Language documentation: https://support.atlassian.com/jira-service-management-cloud/docs/use-advanced-search-with-jira-query-language-jql/
- JQL functions: https://support.atlassian.com/jira-software-cloud/docs/jql-functions/
- JQL operators: https://support.atlassian.com/jira-software-cloud/docs/jql-operators/