3

我表中的每一行都是给定时间的车站状态。它有很多东西会随着时间而改变。水流、温度等。我希望能够从每个站返回最近的记录。并非所有的电台都同时更新,所以我不能只抓取最后几条记录并知道我拥有它们。

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。

4

2 回答 2

2

基本上,您想要的是表中该站的排序日期最大的所有列。在 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)
于 2013-07-27T06:53:18.320 回答
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

(此处为实时代码)

于 2013-07-27T07:16:03.320 回答