
Jira JQL can do more than most teams expect. Filtering by project, assignee, or work type is the basic level. Time in status is the level where JQL starts answering questions about the process, not just the status.
In this guide, you’ll find some 16 most useful and practical Jira JQL Time in Status queries for workflow optimization, sprint tracking, bottleneck detection, and Jira status history analysis.
What Is Jira JQL Time in Status?
Jira JQL Time in Status refers to using Jira Query Language (JQL) together with workflow status history and time-based filters to analyze how issues move through Jira workflows.
While native Jira JQL cannot directly calculate cumulative time spent in each status, it can still help teams uncover workflow patterns and operational delays.
For advanced Jira Time in Status reporting — including exact status duration, transition counts, assignee time, and cycle time analytics — teams typically combine JQL with Time in Status apps and workflow reporting tools.
Time-Range Status Searches
These JQL queries help filter issues based on when workflow status changes happened. They are especially useful for sprint reviews, delivery audits, historical reporting, and workflow analytics.
1. Issues that entered a status during a specific month
status CHANGED TO "In Progress" DURING ("2026-01-01", "2026-01-31")Perfect for monthly throughput reports. You can replace the dates and status names to match your own Jira workflow.
2. Issues that moved to Closed between two relative points in time
status CHANGED TO "Closed" DURING ("-5w", "-2w") This query returns issues that transitioned to Closed between two and five weeks ago.
Using relative dates instead of fixed calendar dates makes the filter reusable for rolling reporting windows.
3. Resolved issues in a project for a full calendar year
project = SD AND resolution IS NOT EMPTY AND resolved >= startOfYear(-1) AND resolved <= endOfYear(-1) ORDER BY created ASCUseful for annual Jira reporting and historical delivery analysis.
The startOfYear() and endOfYear() functions automatically calculate last year’s boundaries, so there’s no need to manually update dates.
4. Filter issues by status change and updated date range
project = "Negotiations" AND status CHANGED TO "Accepted" AND (updated >= "2025-12-26" AND updated <= "2025-12-30") Useful for tracking workflow transitions during a specific reporting period. For example, tracking deal acceptances during a particular week.
Staleness and Age Queries
These Jira JQL Time in Status queries help identify issues that have remained untouched for too long — one of the clearest indicators of workflow bottlenecks and delivery slowdowns.
5. Open issues with no status changes in the last two weeks.
status = "Open" AND NOT status CHANGED AFTER -2wOne of the most practical Jira JQL Time in Status patterns.
This query helps teams identify stale work items that have not changed workflow status recently.
6. Returns issues updated in the last 5 days that are not Done
updated >= -5d AND status != DONEA broad but useful catch-all. Returns issues updated in the last five days that are still not done.
7. Overdue open issues with no recent status movement
project = SD AND due <= now() AND statusCategory != Done AND NOT status CHANGED after -5d
Combines deadline awareness with status staleness. If something is past due and no one has updated the status for 5 days, it belongs at the top of your list.
Historical Status Queries (WAS / CHANGED)
JQL’s WAS and CHANGED operators let you query the history of an issue, not just its current state. These work on a handful of fields — Status, Assignee, Priority, Resolution, Fix Version, and Reporter.
8. Returns issues that went through a specific workflow transition
project = SD AND status CHANGED FROM "In progress" TO "On review"Returns issues that transitioned from In Progress to On Review at any point in their workflow history.
9. Find issues that were ever in a specific status
status WAS "In Progress"
This historical Jira query returns all issues that were previously in the selected workflow status, regardless of their current state.
Useful for:
- workflow audits,
- historical reporting,
- and process analysis.
10. Recently completed issues assigned to the current user
assignee = currentUser() AND status = Done AND updated >= -30d Handy for individual performance reviews or workload recaps.
11. Track a specific transition: FROM one status TO another
status CHANGED FROM "In Progress" TO "Done" AFTER "2026-05-01"More precise than just changed TO. This targets the exact transition rather than just arrival at a status — useful when you want to exclude issues that were moved to Done from somewhere other than In Progress.
12. Identify issues with no recent workflow movement in active statuses.
project = "TL" AND Sprint = 10405 AND status IN ("On Review", "In Progress") AND NOT status CHANGED AFTER -3dOne of the most practical Jira JQL Time in Status queries for bottleneck detection.
This filter helps teams identify issues that have remained in development or review stages for more than three days.
Visualizing Age (Traffic Light Queries)
True cycle time calculation isn’t possible with plain JQL — for that, you need an add-on. But you can use JQL to flag issues by age and color-code them for visual dashboards.
13. Aging card: Yellow alert (5+ days in development)
resolution IS EMPTY AND status CHANGED to "In Progress" BEFORE -5dUseful for identifying work items that may require escalation or follow-up.
Can also be used for Jira board card coloring rules.
14. Aging card: Orange alert (10+ days in development)
resolution IS EMPTY AND status CHANGED to "In Progress" BEFORE -10dHelps teams detect medium-risk workflow aging and delivery slowdowns.
15. Aging card: Red critical alert (15+ days in development)
resolution IS EMPTY AND status CHANGED to "In Progress" BEFORE -15dUseful for identifying long-running Jira issues that may be blocked, oversized, or deprioritized.
These three queries are designed to power Jira board card colouring rules. Set each one as a card color condition, and you get an instant visual heat map of aging work — no add-on required.
Sprint-Scoped Status Tracking
16. What moved into active work during this week’s sprint
sprint IN openSprints() AND status CHANGED TO "In Progress" DURING (startOfWeek(), endOfWeek()) Great for mid-sprint check-ins. Scope it further by adding AND assignee = currentUser() to see only your own movement.
The Ultimate Limit of Native JQL: Calculating True Cycle Time
As you can see, JQL is incredible for filtering lists of issues. However, JQL filters issues, but it does not measure elapsed time. If you need to know that Issue X spent exactly 4 days in “In Review”, 2 hours in “QA”, and bounced back to “In Progress” three times, native JQL cannot help you. To transform these filters into real time-tracking dashboards, you need an operational reporting tool.
Supercharge Your Workflow Analytics with Time in Status
To get data-rich dashboards without struggling with complex queries, Time in Status by SaaSJet bridges this gap instantly. It reads your workflow history and automatically generates 7 types of status reports, including Time in Status, Assignee Time, Transition Count, Average Time, and more.

Pro Tip: You can combine both approaches by using custom JQL filters (like
issuetype = Story) directly inside the Time in Status app to generate focused workflow and time-based reports.
Takeaway
Mastering time-focused JQL helps you extract critical answers from your Jira workflow history. By combining current states (status =), historical footprints (status WAS), and transitions (status CHANGED), you can build powerful dashboards to monitor team health.
When your tracking needs outgrow static lists and require actual time duration metrics, that’s where a dedicated app steps in.
Ready to see how fast your workflow actually moves? Try Time in Status for Jira. Start a free 30-day trial!
FAQ
1. Can Jira JQL calculate the exact Time in Status?
No. Native Jira JQL can filter issues based on status history and transitions, but it cannot calculate the exact time spent in each status. For precise Time in Status reporting, teams usually use dedicated Jira apps or reporting tools.
2. What is the difference between WAS and CHANGED operators in JQL?
WAS checks whether a field ever held a specific value at any point in the issue’s history, regardless of the current state. CHANGED is more specific — it lets you query transitions, including the direction (FROM one status TO another) and the time window when the change happened.
3. How do I find issues stuck in a Jira status?
You can use Jira JQL to identify issues that have not changed workflow status for a specific period of time. For example:
status = "In Progress" AND NOT status CHANGED AFTER -5d
This query returns issues that are currently in In Progress status and have not had any status changes in the last five days. It is especially useful for spotting potential workflow bottlenecks, stalled tasks, or work items that may require follow-up from the team.
4. What are the limitations of native Jira JQL?
Native Jira JQL is excellent for filtering and searching issues, but it has several limitations for workflow analytics and time tracking. JQL can identify status changes, historical transitions, and date-based activity, but it cannot calculate exact time spent in each status, cycle time, lead time, or assignee duration.
For example, JQL can show whether an issue moved to “In Progress” more than five days ago, but it cannot measure how many total hours or days the issue actually spent there. Advanced reporting features such as Time in Status analysis, transition counts, SLA tracking, and workflow duration metrics typically require dedicated Jira reporting apps or Marketplace add-ons.