4

テーブルには、1日にいくつかのメジャーがあります

29011   2012-12-28 09:00:00
28701   2012-12-28 10:00:00
28830   2012-12-28 11:00:00
28353   2012-12-28 12:00:00
28642   2012-12-28 13:00:00
28583   2012-12-28 14:00:00
28800   2012-12-29 09:00:00
28751   2012-12-29 10:00:00
28670   2012-12-29 11:00:00
28621   2012-12-29 12:00:00
28599   2012-12-29 13:00:00
28278   2012-12-29 14:00:00

各日の最初の最後の値のを取得するにはどうすればよいですか?

私はこのような結果を望みます:

428 2012-12-28
522 2012-12-29

私はこれを試しました

SELECT (MAX(volume) - MIN(volume)),DATE_FORMAT(FROM_UNIXTIME(tstamp), '%Y-%m-%d') date FROM tank
GROUP BY DATE_FORMAT(FROM_UNIXTIME(tstamp), '%Y-%m-%d')
ORDER BY tstamp

ただし、最初と最後の措置ではなく、最小値と最大値が必要です。

4

6 に答える 6

3

副選択を使用してその日の最小タイムスタンプと最大タイムスタンプを取得し、その結果を元のテーブルに対して 2 回結合します。1 回は最小値で、もう 1 回は最大値でボリュームを取得します。次に計算します:-

SELECT Sub1.JustDate, (b.volume - a.volume) AS VolumeDifference
FROM (
SELECT DATE_FORMAT(FROM_UNIXTIME(tstamp), '%Y-%m-%d') AS JustDate, MIN(tstamp) AS MinTimeStamp, MAX(tstamp) AS MaxTimeStamp
FROM tank
GROUP BY JustDate) Sub1
INNER JOIN tank a ON Sub1.MinTimeStamp = a.tstamp
INNER JOIN tank b ON Sub1.MaxTimeStamp = b.tstamp

これは、それらが実際の UNIX タイムスタンプであり、どちらが最新かを判断できない単なる CCYYMMDD 日付ではないことを前提としています。

于 2013-03-15T14:42:13.207 に答える
0

このpostgresを試してみましたが、動作しています

select (maxvalue1-minalue1) as date, time from(
select min(id) as minalue1, max(id) as maxvalue1, time::Date from master_booking group by time::date
) data

見てみな。

于 2013-03-15T14:35:15.947 に答える
0

この場合、First と Last は相対値です。これは、これらの値のどちらかを示すものがないためです。

29011   2012-12-28
28701   2012-12-28
28830   2012-12-28
28353   2012-12-28
28642   2012-12-28
28583   2012-12-28

最初か最後でした。テーブルに auto_increment ID を追加して並べ替えるか、日付を日時フィールドに変更して日時で並べ替えることができます。

于 2013-03-15T14:35:41.660 に答える
0

これを試して:

SELECT ( max(volume) keep(dense_rank last order by to_char(tstamp,'YYYY-MM-DD')) - min(volume) keep(dense_rank last order by to_char(tstamp,'YYYY-MM-DD')) )差分, to_char(tstamp,'YYYY-MM-DD') 日付 FROM タンク GROUP BY to_char(tstamp,'YYYY-MM-DD') ORDER BY to_char(tstamp,'YYYY-MM-DD')

于 2014-03-18T08:27:35.947 に答える