2013-02-22 119 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] 

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