MySQL每天选择最后一行
正在尝试每天选择最后一行 这是我的(简化,实际表中有更多记录)表: 我想选择id=9、id=6和id=3的行 我尝试了以下查询:MySQL每天选择最后一行,mysql,aggregate-functions,Mysql,Aggregate Functions,正在尝试每天选择最后一行 这是我的(简化,实际表中有更多记录)表: 我想选择id=9、id=6和id=3的行 我尝试了以下查询: SELECT MAX(datetime) Stamp , temp FROM weatherdata GROUP BY YEAR(DateTime) , MONTH(DateTime) , DAY(DateTime) order by datetime desc limit 10; 但是dateti
SELECT MAX(datetime) Stamp
, temp
FROM weatherdata
GROUP
BY YEAR(DateTime)
, MONTH(DateTime)
, DAY(DateTime)
order
by datetime desc
limit 10;
但是datetime和temp不匹配
这里有一种方法,它获取每天的
MAX
日期,然后在内部查询中使用它来获取其他字段:
SELECT *
FROM test
WHERE `datetime` IN (
SELECT MAX(`datetime`)
FROM test
GROUP BY DATE(`datetime`)
);
以下是如果您的行总是插入且从不更新,并且id
是一个自动递增的主键,那么
SELECT w.*
FROM weatherdata w
JOIN ( SELECT MAX(id) id
FROM weatherdata
GROUP BY DATE(datetime)
) last ON w.id = last.id
你会得到你想要的。为什么?内部查询返回weatherdata
中每个日期的最大(表示最近的)id
值。这确实非常快,特别是如果您在datetime
列上放置索引
但有可能这项工作的条件不成立。如果您的datetime
列有时会更新以更改日期,则较大的id
值可能并不总是意味着较大的datetime
值
那样的话,你需要这样的东西
SELECT w.*
FROM weatherdata w
JOIN ( SELECT MAX(datetime) datetime
FROM weatherdata
GROUP BY DATE(datetime)
) last ON w.datetime = last.datetime
您的查询不起作用,因为它误用了MySQL GROUP BY的讨厌的非标准扩展。请阅读以下内容:
它应该恰当地用来强调结果的不可预测性。应该是
SELECT MAX(datetime) Stamp, ANY_VALUE(temp) temp
这意味着不能保证正确的行的临时值。相反,它可以从每天分组中的任何行返回临时值 你能详细说明一下吗:但是日期时间和温度不匹配。达尔山·梅塔:太好了!只是我想要的。琼斯:id是自动递增的,行永远不会更新。谢谢你的建议。id是自动递增的,并且从不更新行。Darshan的建议奏效了,但我也从你那里学到了一些东西。我喜欢你告诉我这个查询在做什么。我也尝试了你的建议(第一个),这也很好。谢谢
SELECT MAX(datetime) Stamp, ANY_VALUE(temp) temp