按ID分组,仅选择每个的最新记录

时间:2013-07-27 06:46:34

标签: sql sqlite

我表格中的每一行都是指定时间的电台状态。随着时间的推移,它有很多变化。水流,温度等。我希望能够从每个电台返回最新的记录。并非所有的电台都同时更新,因此我无法抓住最后几条记录并知道我拥有它们。

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。

2 个答案:

答案 0 :(得分:2)

基本上你想要的是表中所有列,其中sortdate对于该站是最大的。在sql中执行此操作有点混乱,您可以在此处看到:MySQL SELECT unique column where other column is max

如果我没有犯任何错误,您的架构的查询将是

SELECT *
FROM dailymean
WHERE (station, sortdate) IN
    (SELECT station, MAX(sortdate)
     FROM dailymean
     GROUP BY station)

答案 1 :(得分:2)

我会这样做:

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

(Live code here)