Standard JQL gets you far, but advanced techniques like subqueries and complex functions separate power users from casual searchers. These methods help you slice through thousands of issues with surgical precision.
Leverage Subqueries for Complex Relationships
Subqueries let you search based on related issue data. Use issueFunction in linkedIssuesOf() to find all issues linked to specific criteria:
issueFunction in linkedIssuesOf("project = MOBILE AND status = Done")
This finds all issues linked to completed MOBILE project tickets. Combine with NOT to exclude results: project = WEB AND issueFunction NOT in linkedIssuesOf("status = Closed")
Master Date Functions for Time-Based Searches
Go beyond simple date ranges with advanced functions. Use startOfWeek() and endOfWeek() for weekly reporting:
created >= startOfWeek(-1) AND created <= endOfWeek(-1)
Find issues created exactly last week. The -1 parameter means "one week ago." Use startOfMonth() and endOfMonth() for monthly cycles.
Combine Multiple Functions for Precision
Stack functions for complex scenarios. Find high-priority bugs reported by external users in the last sprint:
type = Bug AND priority in (High, Highest) AND reporter in membersOf("external-users") AND created >= -2w
The membersOf() function searches group membership, while -2w represents two weeks ago.
Pro Tip: Use Parentheses for Logic Grouping
Complex queries need proper logic grouping. Use parentheses to control operator precedence:
(status = "In Progress" OR status = "Code Review") AND assignee = currentUser() AND sprint in openSprints()
Key Takeaway: Master subqueries and advanced functions to transform JQL from a simple search tool into a powerful data analysis engine for project insights.