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 に答える