2012-01-11 54 views
1

我試圖做一個SQL報告,其中字段x在2個不同的行(如同一個名稱)相同,提交y是相同的2個不同的行(如狀態),但字段z是一秒差(進入工作時間)。 z的格式是hhmmss。有人可以幫我弄這個嗎?SQL報告x和y字段相同,z與1秒差異

+0

你正在使用哪些DBMS?日期時間操作函數在它們之間有所不同。 – 2012-01-11 09:50:20

+0

什麼是您的RDBMS? – 2012-01-11 09:50:29

+0

我需要在一個控制訪問系統(Picture Perfect)中使用REDHAT LINUX環境中的INFORMIX數據庫。 – 2012-01-11 10:41:08

回答

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'。 – 2013-02-01 20:09:56

+0

@JonathanLeffler謝謝,取而代之:) – 2013-02-08 16:43:30

0

我從來沒有用過的Informix,但我認爲以下查詢應該罰款。它應該返回兩個掃描中的第一個。請注意,如果掃描之間的間隔長於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) 
    ) 

它採用substring功能和casting爲varchar時間轉換成秒。

+0

Informix DATETIME值不是VARCHAR,雖然它們可以被強制轉換爲VARCHAR,並且SUBSTR(而不是SUBSTRING)會在純時間(DATETIME HOUR TO SECOND)字段中進行轉換。如果它是DATETIME YEAR TO SECOND或類似的東西,事情就會不那麼開心 - 但主要是調整範圍的問題。 – 2013-02-08 19:00:23

相關問題