簡體   English   中英

如何在日期中獲得第一條記錄和最后一條記錄

[英]How to get first record and last record in a date

我有一個以下格式構成的表:

**ID        StationID         Status        UpdateTime**
  1             1              xxxx      2014-09-25 00:01:05
  2             1              xxxy      2014-09-25 01:05:18
  3             1              xxxz      2014-09-25 09:23:05
  4             1              xxxx      2014-09-25 20:01:05
  5             1              xxxz      2014-09-25 23:21:34
  6             1              xxxz      2014-09-26 00:01:00
  7             1              xxxx      2014-09-26 01:45:24
  8             1              xxxy      2014-09-26 14:01:43
  9             1              xxxx      2014-09-26 22:01:27

對於每一天,我想選擇第一條記錄和最后一條記錄。 結果如下:

**ID        StationID         Status        UpdateTime**
  1             1              xxxx      2014-09-25 00:01:05
  5             1              xxxy      2014-09-25 23:21:34
  6             1              xxxz      2014-09-26 00:01:00
  9             1              xxxx      2014-09-26 22:01:27

謝謝大家;

試試這個:

select *
  from YOUR_TABLE yt
  join (select min(UpdateTime) minUpdateTime, max(UpdateTime) maxUpdateTime
          from YOUR_TABLE
         group by DATE_FORMAT(UpdateTime, '%Y-%m-%d')
       ) aggyt on aggyt.minUpdateTime = yt.UpdateTime or aggyt.maxUpdateTime = yt.UpdateTime
select * from mytable 
where UpTime = (select min(UpTime) from mytable group by date_format(UpTime,'%Y-%m-%d')) 
or UpTime = (select max(UpTime) from mytable group by date_format(UpTime,'%Y-%m-%d')) 
order by id
select * from mytable 
where UpTime= (select min(UpTime) from mytable group by date_format(UpTime,'%Y-%m-%d')) 
or UpTime= (select max(UpTime) from mytable group by date_format(UpTime,'%Y-%m-%d')) 
order by id

如果你想通過工會來做到這一點

SELECT ID, StationId, Status, max(UpdateTime) FROM YOUR_TABLE GROUP BY DATE(UpdateTime)
UNION ALL
SELECT ID, StationId, Status, min(UpdateTime) FROM YOUR_TABLE GROUP BY DATE(UpdateTime)

只是添加,為了提高效率,使用UNION ALL而不是UNION(或UNION DISTINCT)作為UNION需要帶索引的內部臨時表(跳過重復行),而UNION ALL將創建沒有這樣索引的表。

如果你想通過union和subquery來做這件事

select * from table where id IN ( select max(id) from table GROUP BY DATE(UpdateTime) )
union all
select * from table where id IN ( select min(id) from table GROUP BY DATE(UpdateTime) )

如果你想通過子查詢來做

SELECT * from table
WHERE  id IN ( select max(id) from table GROUP BY DATE(UpdateTime) )
OR id IN ( select min(id) from table GROUP BY DATE(UpdateTime) )

可能這會起作用

SELECT ID,StationId,Status,MAX(UpdateTime) FROM YOUR_TABLE GROUP BY DATE(UpdateTime)
UNION ALL
SELECT ID,StationId,Status,MIN(UpdateTime) FROM YOUR_TABLE GROUP BY DATE(UpdateTime)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM