SQL實現查詢最近一週、一個月、三個月的資料
最近在做一個Web專案,專案需求中需要提供查詢訂單表中最近一週,最近一個月,最近3個月的訂單資訊,以便運營人員進行資料分析。專案中使用的資料庫使用的是MySQL,所以以下所有命令都是基於MySQL的。
首先來看看MySQL的DATE_ADD函式:
These functions perform date arithmetic. The date
argument
specifies the starting date or datetime value. expr
is
an expression specifying the interval value to be added or subtracted from the starting date. expr
-
” for
negative intervals. unit
is
a keyword indicating the units in which the expression should be interpreted.
The INTERVAL
keyword and the unit
specifier
are not case sensitive.
The following table shows the expected form of the expr
argument
for each unit
unit Value |
Expected expr Format |
---|---|
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MICROSECOND |
'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND |
'MINUTES:SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
以上是摘自MySQL官網的文件,連結:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
用法如下:
當前時間:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2014-07-03 21:16:22 |
+---------------------+
1 row in set (0.00 sec)
下一個月:
mysql> select date_add(now(),interval 1 month);
+----------------------------------+
| date_add(now(),interval 1 month) |
+----------------------------------+
| 2014-08-03 21:16:28 |
+----------------------------------+
1 row in set (0.00 sec)
上一個月:
mysql> select date_add(now(),interval -1 month);
+-----------------------------------+
| date_add(now(),interval -1 month) |
+-----------------------------------+
| 2014-06-03 21:17:02 |
+-----------------------------------+
1 row in set (0.00 sec)
mysql>
專案中order表中的createTime是unix timestamp的,所以首先需要轉換一下日期格式,這裡用到了 FROM_UNIXTIME(timestamp)。
最終的SQL語句如下:
select from_unixtime(createTime) as datetime from wm_order having datetime between date_add(now(),interval -1 month) and now();
先到這裡了,下班啦!