如何选择最近7天可用-MySql

时间:2019-03-25 15:10:28

标签: mysql sql datetime

我在处理MySQL中的数据时遇到问题。如何从7个可用糊中选择所有数据?

我试图跑步

SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW();

但我并非出于我的目的而工作。 假设我们是1月9日,而我的MAX(ship_day)是1月7日,我想从过去的7个可用数据中提取数据,因此从1月1日到7日。

我试图跑步

SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(MAX(ship_day), INTERVAL 7 DAY) AND MAX(ship_day);

但是我出错了。

我知道我可以将INTERVAL 7 DAY增加到INTERVAL 9 DAY,但是我希望此过程是自动的。我该怎么解决?

3 个答案:

答案 0 :(得分:1)

好吧,这是一种方法:

SELECT d.* 
FROM database d 
WHERE d.ship_day >= COALESCE( (SELECT DISTINCT d2.ship_day 
                               FROM database d2 
                               ORDER BY d2.ship_day DESC
                               LIMIT 1 OFFSET 6
                              ), d.ship_day
                           );

注意:如果每个ship_day只有一行,则只需使用limit

SELECT d.* 
FROM database d 
ORDER BY d.ship_day DESC
LIMIT 7

答案 1 :(得分:0)

  

假设我们在1月9日,而我的MAX(ship_day)是1月7日   我想从过去7个可用数据中提取数据,所以从1月开始   1到7。

我假设您正在寻找以下查询,但是如果没有示例数据和预期结果,很难确定。

SELECT 
 *
FROM 
 t
WHERE
 ship_day >= (
   SELECT 
     MAX(ship_day) - INTERVAL 7 DAY
   FROM
    t
 )

或者您也可以将其写为

SELECT 
 *
FROM 
 t
WHERE
 ship_day >= (
   SELECT 
     MAX(ship_day)
   FROM
    t
 ) - INTERVAL 7 DAY

答案 2 :(得分:0)

您可以使用以下命令获取数据的最后日期:

select MAX(ship_day) FROM database

所以像这样使用它:

SELECT * FROM database 
where ship_day >= DATE_SUB((select MAX(ship_day) FROM database), INTERVAL 7 DAY)