MySQL results yesterday, last week, last month and last year

∥☆過路亽.° 提交于 2019-12-08 15:22:41

问题


my datefield (artists.onlineDate) is yyy-mm-dd hh:mm:ss

right now I got:

-- Today
SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE()
-- Current Week
SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(CURDATE(), 3)
-- Current Month
SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(CURDATE())
-- Current Year
SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(CURDATE())

But what I need is exact: Yesterday, Last Week, Last Month, Last Year

I try to explain. if we got wednesday, and I use SELECT * FROM artists WHERE DATE(artists.onlineDate) = CURDATE(), then I get monday to wednesday.

I would like to have the monday to sunday of the last week. the calendar week before.

And the same for the month and year.

I thins SUB_DATE is not the right way.

Any suggestions?


回答1:


OK I found what I was looking for at:

MySQL Query to select data from last week?

SELECT * FROM testwoche 
 WHERE WEEK (datum, 3) = WEEK(current_date, 3) - 1 
   AND YEAR(datum) = YEAR(current_date) ORDER BY datum DESC

same for month

SELECT * FROM testwoche 
 WHERE month (datum) = month(current_date) - 1 
  AND YEAR(datum) = YEAR(current_date) 
ORDER BY datum DESC

This gives back the last week from monday to sunday and the last month

Thanks everybody for helping!




回答2:


I think you can use the SUBTIME function: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_subtime

I haven't had time to really test it, but I think you get the idea:

Yesterday:

 SELECT * FROM artists WHERE DATE(artists.onlineDate) = SUBTIME(CURDATE(),'1 0:0:0');

Last Week

SELECT * FROM artists WHERE WEEK(artists.onlineDate, 3) = WEEK(SUBTIME(CURDATE(),'7 0:0:0'), 3)

Last Month

SELECT * FROM artists WHERE MONTH(artists.onlineDate) = MONTH(SUBTIME(CURDATE(),'31 0:0:0'))

Last Year

SELECT * FROM artists WHERE YEAR(artists.onlineDate) = YEAR(SUBTIME(CURDATE(),'365 0:0:0'))



回答3:


To get a specific week/month/year (which still works when your db contains several years worth of data and when your current time is the start of a new year), this should work:

SELECT * FROM testwoche WHERE 
((YEAR(CURDATE())-YEAR(datum)))*52-WEEK(datum,3)+WEEK(CURDATE(),3) = 1;

If you want two weeks ago, you could change it to =2 (if you want current week, from Monday to current day: =0). If you want last month, you change the WEEK function to MONTH.



来源:https://stackoverflow.com/questions/16529899/mysql-results-yesterday-last-week-last-month-and-last-year

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!