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

如何选择最后7天可用-MySql,mysql,sql,datetime,Mysql,Sql,Datetime,我在处理MySQL中的数据时遇到问题。如何从pasty seven可用数据中选择所有数据 我试着跑 SELECT * FROM database where ship_day BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW(); SELECT * FROM database where ship_day BETWEEN DATE_SUB(MAX(ship_day), INTERVAL 7 DAY) AND MAX(ship_day); 但我

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

我试着跑

SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW();
SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(MAX(ship_day), INTERVAL 7 DAY) AND MAX(ship_day);
但我不是为了我的目的而工作。 假设我们在1月9日,我的
MAX(ship_day)
是1月7日,我想从过去7个可用数据中提取数据,从1月1日到7日

我试着跑

SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW();
SELECT * FROM database where ship_day 
BETWEEN DATE_SUB(MAX(ship_day), INTERVAL 7 DAY) AND MAX(ship_day);
但我犯了个错误


我知道我可以将
间隔7天
增加到
间隔9天
,但我希望这个过程是自动的。我该怎么解决呢?

好吧,这里有一种方法:

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
                           );
注意:如果您每
发货日只有一行
,则只需使用
限制

SELECT d.* 
FROM database d 
ORDER BY d.ship_day DESC
LIMIT 7
假设我们是在1月9日,我的最大发货日是1月7日 我想从过去7个可用数据中提取数据,从1月份开始 一号到七号

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

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

您可以通过以下方式获取数据的最后日期:

select MAX(ship_day) FROM database
所以像这样使用它:

SELECT * FROM database 
where ship_day >= DATE_SUB((select MAX(ship_day) FROM database), INTERVAL 7 DAY)
有关提供示例数据和预期结果的信息,请参见“工作正常!但gordon linoff提供的更快”Yes@Lucaferario这很可能需要扫描整个表数据或索引数据,以获得正确的内部查询。。但我假设
发货日
列在您的表中被索引了?