1. 程式人生 > >SQL實現查詢最近一週、一個月、三個月的資料

SQL實現查詢最近一週、一個月、三個月的資料

最近在做一個Web專案,專案需求中需要提供查詢訂單表中最近一週,最近一個月,最近3個月的訂單資訊,以便運營人員進行資料分析。專案中使用的資料庫使用的是MySQL,所以以下所有命令都是基於MySQL的。

首先來看看MySQL的DATE_ADD函式:

These functions perform date arithmetic. The date argument specifies the starting date or datetime value. expris an expression specifying the interval value to be added or subtracted from the starting date. expr

 is a string; it may start with a - 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

 value.

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();

先到這裡了,下班啦!