2017-04-07 100 views
0
DATE     | ID | PARAM_TYPE 
07-08-2012 10:10:53 AM| 5613| INPUT 
07-08-2012 10:10:59 AM| 5613| OUTPUT 
07-08-2012 10:16:34 AM| 5624| INPUT 
07-08-2012 10:16:42 AM| 5624| OUTPUT 
07-08-2012 08:09:08 AM| 5503| INPUT 
07-08-2012 08:09:15 AM| 5503| OUTPUT 

表名之间的区别:EMP_RECORDS 我想显示INPUTOUTPUT之间的时间差,作为单个记录。SQL查询发现两次

例如:

DATE    |ID | PARAM_TYPE 
07-08-2012 10:10:53 AM| 5613| INPUT 
07-08-2012 10:10:59 AM| 5613| OUTPUT 

AS

ID |Difference 
5613| 6 min 
+0

是否每个'id'有**一个**输入和**一个**输出? –

+0

通常,Oracle SQL Developer与Oracle而不是MySQL一起使用。我正在更换标签。 –

回答

0

您可以使用加入为其中一个表具有输入和一个具有输出:

SELECT a.ID AS ID,(b.DATE-a.DATE) AS Difference 
FROM EMP_RECORDS AS a 
    JOIN EMP_RECORDS AS b ON a.ID = b.ID 
WHERE a.PARAM_TYPE = 'INPUT' AND b.PARAM_TYPE = 'OUTPUT' 
1

可以使用LAG解析函数:

SELECT id, 
     (output_date - input_date) * 24 * 60 AS minutes_difference 
FROM (
    SELECT id, 
     "DATE" as output_date, 
     LAG(CASE param_type WHEN 'INPUT' THEN "DATE" END) 
      IGNORE NULLS OVER (PARTITION BY id ORDER BY "DATE") AS input_date, 
     param_type 
    FROM EMP_RECORDS 
) 
WHERE param_type = 'OUTPUT'; 
+0

我比其他解决方案更喜欢LAG方法。 – unleashed

-1

PLS更改列的名称日期:仅适用于SQL

SELECT 
     A.id, 
     DATEDIFF(A.date_val,B.date_val) AS duration 
     FROM EMP_RECORDS A 
     JOIN EMP_RECORDS B 
     ON A.id = B.id 
WHERE A.PARAM_TYPE = "INPUT" 
     B.PARAM_TYPE = "OUTPUT"; 
+2

Oracle没有'DATEDIFF'功能。 – MT0