2013-02-22 200 views
0

我有一個兩個表呼叫RFS和RFS_History。SQL查詢獲取不同日期之間的差異select statt

RFS_id | name 
--------+-------- 
    12 | xx 
    14 | yy 
    15 | zz 

圖1:RFS表

 RFS_id | gate | End | start 
    --------+-------+--------+------- 
     12 | aa | 19/02 | 20/03 
     12 | bb | 30/01 | 12/08 
     12 | cc | 30/01 | 12/08 
     13 | aa | 30/01 | 12/08 
     12 | dd | 30/01 | 12/08 

圖2:RFS歷史

我最初的查詢是一個SELECT *查詢來獲取信息,其中FRSname = 'XX'

SELECT * FROM RFS, RFSHistory 
WHERE RFSname="xx" And RFShistory.RFS_ID=RFS.RFS_ID 

結果是:

 RFS_id | gate | End | start 
    --------+-------+--------+------- 
     12 | aa | 19/02 | 19/01 
     12 | bb | 12/04 | 12/02 
     12 | cc | 20/03 | 12/03 
     12 | dd | 30/09 | 12/08 

圖3

但是我想獲得像波紋管格式結果:

RFS_id | gate_aa | gate_bb | gate_cc | gate_dd 
---------------------------------------------- 
    12 | 30 days | 60dyas | 8days | 18days 

gate_aa是duraion,它從start - end date得到。請幫我寫單個查詢來獲得這個結果。

+4

您正在使用哪種關係數據庫管理系統(甲骨文,MSSQL,MySQL的等)?什麼是結束和開始的數據類型? – Arion 2013-02-22 10:05:33

回答

0

使用datediff()得到的時間差和Pivot()到排在這裏轉化爲cloumn 像你的情況門方向列

樣品語法

SELECT DATEDIFF(day,'2008-06-05','2008-08-05') AS DiffDate 
0

在這裏你可以找到一個解決您的PB:

mysql select dynamic row values as column names, another column as value

以下是如何操作爲您的問題:

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT CONCAT( '總和(情況下,當柵極= ''', 柵極, '' '然後天結束)AS GATE_', 柵極 ) )INTO @sql FROM RFSHistory;

SET @sql = CONCAT( 'SELECT RFSH.RFS_id,',@sql, ' FROM(SELECT RFS_id,柵極, DATEDIFF( STR_TO_DATE(CONCAT(SUBSTRING(End,4,2),\'。 ('0123','1','2013'),GET_FORMAT(DATE, ,'''','SUBSTRING(Start,1,2)',''','2013'),GET_FORMAT(DATE,'USA')) )as Days
FROM RFSHistory)as RFSH JOIN RFS ON RFSH.RFS_id = RFS.RFS_id WHERE RFS.name = \'xx \' GROUP BY RFSH。RFS_id');

從@sql中準備stmt;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

Test it on SQLfiddle

0

您可以使用下面的查詢得到的差值B/W日期

SELECT RFS.ID,(RFS_HISTORY.end_t-RFS_HISTORY.start_t)AS DiffDate,門FROM RFS,RFS_HISTORY 其中name = 'AA' 而RFS_HISTORY.ID = RFS.ID組由RFS.ID,門,RFS_HISTORY.end_t,RFS_HISTORY.start_t

0

我想你想精讀將行垂直放入值的列中。這可以通過旋轉來完成。

SELECT * FROM RFS, RFSHistory 
pivot for columname on [values] 

我居然忘了語法,但你可以谷歌