2016-11-19 59 views
0

2つの日付/時刻の間に複数のフィールドのテーブルを照会したいのですが、2つの日付/時刻の間の最大日時を判別する必要があります。 DataValueは| | basistime | PE1は| PE2 | tは| S |蓋が2つの日付間の最大日付/時刻を取得

validtimeがbasistimeがDataValueは有効です日付/時間であるのに対し validtime:

テーブルはフィールドのこれらのタイプが含まれていますデータ値が作成された日付/時刻。私は2つの日付/時間の間にmax(basistime)を見つける必要があります。

これは私が今のように、しかし、成功せずに持っているものです。

SELECT validtime, datavalue, max(basistime) from ped where lid='XXXXX' and 
and pe1='H' and pe2='G' and t='C' and s='Z' and basistime>='2014-11-19 
12:00:00' and basistime<'2014-11-19 23:45:00' group by ped.validtime,   
ped.datavalue, ped.basistime; 

私も次のことを試してみました:

SELECT validtime, datavalue, (SELECT MAX(basistime) from ped where 
lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' and 
basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00') 
from ped where lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' 
and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00'; 

CREATE TEMPORARY TABLE temp AS SELECT basistime, validtime, datavalue, lid, 
pe1, pe2, t, s, from ped where lid='XXXXX' and pe1='H' and pe2='G' and t='C' 
and s='Z' and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 
23:45:00' group by ped.validtime, ped.datavalue; SELECT t.validtime, 
t.datavalue from temp t where t.lid='XXXXX' and t.basistime=max(t.basistime) 
order by validtime ASC; 

CREATE TEMPORARY TABLE temp AS SELECT max(basistime), validtime, datavalue,  
lid, pe1, pe2, t, s, from ped where lid='XXXXX' and pe1='H' and pe2='G' and 
t='C' and s='Z' and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-  
19 23:45:00'; SELECT t.validtime, t.datavalue from temp t where  
t.lid='XXXXX' and t.basistime=max(t.basistime) order by validtime ASC; 

私もテキストとしてbasistimeをキャストを試してきたし、 2つの日付の間にBETWEENを使用します。

上記のクエリのほとんどはデータを生成しません。私が最初に投稿したものはデータを生成しますが、日付は2009年です(明らかに2つの日付の間にはありません)。

望ましい結果は、以下のような出力のようになります。 validtime、DataValueは、最大(basistime)

私はstackoverflowの上で、そうでなければ見つけることができるすべてのエントリを読んだが、私はまだのように、溶液を見つけることではないのです。ご協力いただきありがとうございます。

+1

テーブル形式のデータの例が便利です。たぶんSQLfiddleを設定しますか? http://sqlfiddle.com/ –

答えて

3

あなたは最大(basistimeを)したい場合は、

SELECT validtime, datavalue, max(basistime) 
from ped 
where lid='XXXXX' 
and pe1='H' 
and pe2='G' 
and t='C' 
and s='Z' 
and basistime>='2014-11-19 12:00:00' 
and basistime<'2014-11-19 23:45:00' 
group by validtime, datavalue 
-1

本当にありがとうございました、誰もがグループにこの列を追加する必要がありません。それは2つの比較的単純なものの組み合わせであることが判明しました。 scaisEdgeが言及しているように、私は基本単位をセクションごとに追加する必要がありました。また、かっこもいくつか欠落していました。最終バージョンは次のとおりです。

SELECT validtime, datavalue, max(basistime) from ped 
where lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' 
and (basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00') 
group by validtime,datavalue,basistime 
order by validtime; 
関連する問題