我在处理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
,但是我希望此过程是自动的。我该怎么解决?
答案 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)