2012-01-11 13 views
1

フィールドxが2つの異なる行(同じNAMEのようなもの)で同じで、yフィールドが2つの異なる(STATUSのような)行はありますが、フィールドzは1秒差(ar作業に入る時間)にあります。 zの形式はhhmmssです。誰かがこれで私を助けることができますか?xとyフィールドが同じでzが1秒の差を持つSQLレポート

+0

どのDBMSを使用していますか? datetime操作関数は、それらの間で異なります。 –

+0

あなたのRDBMSは何ですか? –

+0

私はこれを、REDHAT LINUX環境でINFORMIXデータベースを持つ制御アクセスシステム(Picture Perfect)で使用する必要があります。 –

答えて

1

フィールドNAME(x)は、STATUS(y)とTIME(z)を想定するとしてTIMEを想定したがです:

select t1.* from tablename t1 
inner join tablename t2 
    on t1.NAME = t2.NAME 
    and t1.STATUS = t2.STATUS 
    and t1.TIME = t2.time - 1 UNITS SECOND 
+0

Informixでは、DATEADDは必要ありません。 't2.time - 1 UNITS SECOND'または' t2.time - INTERVAL(1)SECOND'と書くことができます。それは純粋な時間(SECOND TO DATETIMEのHOUR)フィールドの場合 –

+0

@JonathanLefflerのおかげで、置き換える作ら:)彼らはVARCHARとSUBSTRに強制変換できるが –

0

私は、Informixを使用したことがありませんが、私は次のクエリは問題ないはずだと思います。それは2回のスキャンのうちの最初のスキャンに戻るべきです。スキャン間のガブが1秒を超えると、表示されないことに注意してください。

select t.name, t.status, t.data_field, t.time_field 
from tab t 
left join tab t1 on (
     t.name = t1.name and 
     t.status = t1.status and 
     t.data_field = t1.data_field and 
     (substring(t.time_field from 1 to 2)::INTEGER) * 3600 + 
     (substring(t.time_field from 3 to 2)::INTEGER) * 60 + 
     (substring(t.time_field from 5 to 2)::INTEGER) + 1 = 
     (substring(t1.time_field from 1 to 2)::INTEGER) * 3600 + 
     (substring(t1.time_field from 3 to 2)::INTEGER) * 60 + 
     (substring(t1.time_field from 5 to 2)::INTEGER) 
    ) 

それは秒にvarchar型の時間を変換するsubstring機能とcastingを使用しています。

+0

のInformix DATETIME値が(むしろSUBSTRINGより)、VARCHARではありませんが、変換を行うだろう。 DATETIME YEAR TO SECONDまたはこれに類するものであれば、それほどうれしくはありませんが、主に範囲を調整することになります。 –

関連する問題