Sql 按ID分组,仅为每个组选择最新记录
我表格中的每一行都是一个站点在给定时间的状态。随着时间的推移,它有很多变化。水流、温度等。我希望能够返回每个电台的最新记录。并不是所有的电台都在同一时间更新,所以我不能仅仅抓取最后几张记录,然后知道我拥有所有这些记录Sql 按ID分组,仅为每个组选择最新记录,sql,sqlite,Sql,Sqlite,我表格中的每一行都是一个站点在给定时间的状态。随着时间的推移,它有很多变化。水流、温度等。我希望能够返回每个电台的最新记录。并不是所有的电台都在同一时间更新,所以我不能仅仅抓取最后几张记录,然后知道我拥有所有这些记录 Flow Sortdate Station ----------------------------------------- 164 2013-07-19 11502940 520 2013-07-19 11502500 164 2013-
Flow Sortdate Station
-----------------------------------------
164 2013-07-19 11502940
520 2013-07-19 11502500
164 2013-07-20 11502940
520 2013-07-20 11502500
164 2013-07-21 11502940
520 2013-07-21 11502500
我认为这应该行得通
select station, sortdate, flow from dailymean
group by Station
order by sortdate DESC
事实并非如此。我看过这里,有人有这样的东西
select f.station, f.date, f.flow from dailymean f,dailymean second on second.station=f.station
where f.station>second.station,
group by f.Station
order by f.sortdate DESC
这将淘汰最旧的一组记录,但将返回所有其他记录,而不仅仅是最新的记录
我需要的不仅仅是上次更新的日期。我还需要上一次更新每个站点时的水流和许多其他信息。我使用的是SQLite。基本上,您需要的是表中的所有列,其中该站点的排序日期最大。在sql中执行此操作有点混乱,您可以在此处看到: 如果我没有犯任何错误,对您的模式的查询将是
SELECT *
FROM dailymean
WHERE (station, sortdate) IN
(SELECT station, MAX(sortdate)
FROM dailymean
GROUP BY station)
我会这样做:
SELECT
dailymean.Station,
dailymean.Flow,
dailymean.Sortdate
FROM
dailymean
INNER JOIN (
SELECT Station, MAX(Sortdate) AS maxDate FROM dailymean GROUP BY Station
) AS Tmp ON dailymean.Station = Tmp.Station
AND dailymean.Sortdate = Tmp.maxDate
你应该考虑复习你的数据结构。使用两个单独的表,您想要实现的是更简单、更清晰的效果。尝试在查询末尾添加LIMIT n子句以获取n个最新的行,SQLite实现了这一功能:这看起来不错,但当我尝试它和它的不同变体时,仍然会出现错误。也许是SQLite的东西?每个版本的SQL都略有不同。我认为MySQL需要给子查询一个别名。您看到了哪些错误?可选语法:从Dailyman中选择*SELECT,从Dailyman组中选择station,MAXsortdate作为i,其中Dailyman.station=i.station和Dailyman.sortdate=i.sortdate