HomeMYSQLDATETIMEDynamic period queries in MySQL for last week, last month, this year, etc.

Dynamic period queries in MySQL for last week, last month, this year, etc.

📅 1. Last 7 Days

SELECT * FROM orders
WHERE order_date >= CURDATE() - INTERVAL 7 DAY;

🗓️ 2. This Month

SELECT * FROM orders
WHERE MONTH(order_date) = MONTH(CURDATE())
  AND YEAR(order_date) = YEAR(CURDATE());

🗓️ 3. Last Month

SELECT * FROM orders
WHERE MONTH(order_date) = MONTH(CURDATE() - INTERVAL 1 MONTH)
  AND YEAR(order_date) = YEAR(CURDATE() - INTERVAL 1 MONTH);

📆 4. This Year

SELECT * FROM orders
WHERE YEAR(order_date) = YEAR(CURDATE());

📆 5. Last Year

SELECT * FROM orders
WHERE YEAR(order_date) = YEAR(CURDATE() - INTERVAL 1 YEAR);

📈 6. Last 30/90 Days

-- Last 30 days
SELECT * FROM orders
WHERE order_date >= CURDATE() - INTERVAL 30 DAY;

-- Last 90 days
SELECT * FROM orders
WHERE order_date >= CURDATE() - INTERVAL 90 DAY;

🗓️ 7. Between First and Last Day of a Month

-- Last month's range
SELECT * FROM orders
WHERE order_date BETWEEN 
      DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%m-01') AND 
      LAST_DAY(CURDATE() - INTERVAL 1 MONTH);

🔁 8. Week-Based (Monday to Sunday)

🟢 This Week

SELECT * FROM orders
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE(), 1);

🔵 Last Week

SELECT * FROM orders
WHERE YEARWEEK(order_date, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1);

Share: 

No comments yet! You be the first to comment.

Leave a Reply

Your email address will not be published. Required fields are marked *