Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按ID分组,仅为每个组选择最新记录_Sql_Sqlite - Fatal编程技术网

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