2014-11-24 135 views
0
我有以下結構的表

獲取最小值和最大值值從多行事件

ID  TIME_UNIX  STATUS  TIME_DDMMYY_HHMMSS 
1  1416234308  1   (dateadd(second,[time],'19700101')) 
1  1416234313  0   (dateadd(second,[time],'19700101')) 
1  1416234319  1   (dateadd(second,[time],'19700101')) 
1  1416234337  0   (dateadd(second,[time],'19700101')) 
2  1416319268  1   (dateadd(second,[time],'19700101')) 
2  1416319280  0   (dateadd(second,[time],'19700101')) 
2  1416319631  1   (dateadd(second,[time],'19700101')) 

值描述

ID is the identifier of the object who does the insert 
TIME_UNIX is when it happened 
Status can be 1 or 0 (enable/disable) 
TIME_DDMMYY_HHMMSS is just a friendly view of TIME_UNIX column 

所以,我想要做的是產生爲了顯示我每個對象的最小和最大小時每個事件的意義,首先啓用和對象每天最後禁用

ID FIRST_ENABLE_TIME LAST_DISABLE_TIME DDMMYYY 
1  1416234308   1416234337   17Nov2014 
2  1416319268   1416319280   17Nov2014 

一直在嘗試很多內部連接,意見和迄今沒有運氣...

任何機構可以幫助我呢? 在此先感謝

+1

您正在使用什麼RDBMS? SQL Server,Oracle,MySQL,...? – Dan 2014-11-24 14:11:59

回答

1
SELECT ID, 
    MIN(CASE WHEN STATUS = 1 THEN TIME_UNIX ELSE NULL END) AS FIRST_ENABLE_TIME, 
    MAX(CASE WHEN STATUS = 0 THEN TIME_UNIX ELSE NULL END) AS LAST_DISABLE_TIME, 
    TIME_DDMMYY_HHMMSS AS DDMMYYY 
FROM MyTable 
GROUP BY ID, TIME_DDMMYY_HHMMSS 
+1

難道你不需要按時分組,而不是時間? – StevieG 2014-11-24 14:18:47

+0

嗨, 執行,但只帶來1列最小或最大的數據。 \t NULL 08 2014年11月14日:51:35.000 604081 1415962345 NULL 2014年11月14日08:52:25.000 – 2014-11-24 14:25:31

+0

尼斯,@ StevieG 我修改該組由並選擇 轉換(VARCHAR(10 ),TIME_DDMMYY_HHMMSS,103)AS DDMMYYY FROM login GROUP BY ID,convert(varchar(10),TIME_DDMMYY_HHMMSS,103)似乎有效,將驗證數據。 謝謝@丹 – 2014-11-24 14:26:50

0
SELECT ID, 
     (SELECT MIN(TIME_UNIX) 
     FROM table 
     WHERE status = 1) AS FIRST_ENABLE_TIME, 
     (SELECT MAX(TIME_UNIX) 
     FROM table 
     WHERE status = 0) AS LAST_DISABLE_TIME, 
     TIME_DDMMYY_HHMMSS AS DDMMYYY 
FROM table 
GROUP BY ID, TIME_DDMMYY_HHMMSS 
+0

這並沒有考慮到FIRST_ENABLE_TIME應該只考慮STATUS = 1的記錄,以及STATUS = 0的LAST_DISABLE_TIME。 – Dan 2014-11-24 14:08:58

+0

這是記錄所有記錄的最小值和最大值,而不是白天? – StevieG 2014-11-24 14:19:17

+0

隨時更新我的​​答案,如果你可以增加它的價值:) – Matt 2014-11-24 14:19:56

1
SELECT ID, 
    MIN(CASE WHEN STATUS = 1 THEN TIME_UNIX ELSE NULL END) AS FIRST_ENABLE_TIME, 
    MAX(CASE WHEN STATUS = 0 THEN TIME_UNIX ELSE NULL END) AS LAST_DISABLE_TIME, 
    convert(varchar(10),TIME_DDMMYY_HHMMSS,103) AS DDMMYYY FROM 
FROM MyTable 
GROUP BY ID, convert(varchar(10),TIME_DDMMYY_HHMMSS,103) 
相關問題