2016-03-28 10 views
2

我在表1中有2列:Time_StampRunTimeMinute。我如何从RunTimeMinute = 1对应的Time_Stamp值中减去Time_Stamp的值RunTimeMinute = 0(这会让我花费时间让机器运行)?用于计算同一表的两行之间日期时间差的SQL语句

Time_Stamp      RunTimeMinute 
    2016-03-01 04:32:10.0000000 1 
    2016-03-01 04:33:11.0000000 2 
    2016-03-01 04:34:13.0000000 3 
    2016-03-01 04:35:15.0000000 4 
    2016-03-01 04:36:16.0000000 5 
    2016-03-01 04:37:18.0000000 6 
    2016-03-01 04:38:20.0000000 7 
    2016-03-01 04:39:22.0000000 8 
    2016-03-01 04:40:23.0000000 9 
    2016-03-01 04:41:16.0000000 0 
    2016-03-01 04:45:36.0000000 10 
+1

请您至少提供数学您正在尝试在SQL中完成的任务的公式? –

+0

Microsoft SQL Server – Greenitguy

+0

我想花费RunTimeMintue = 0的时间,并从RunTimeMinue = 1的时间中减去它。 – Greenitguy

回答

0

来完成你所描述的任务(所提供的Time_Stamp领域是DateTimeRunTimeMinute类型是一个整数) ,可以使用SQL SELECT查询/子查询技术和DATEDIFF()功能,如图以下示例:

SELECT [YourTable].Time_Stamp AS t1, 
(SELECT YourTable.Time_Stamp FROM YourTable WHERE YourTable.RunTimeMinute=1) AS t0, 
DateDiff("n",[t0],[t1]) AS ElapsedTimeMin 
FROM YourTable 
WHERE ([YourTable].RunTimeMinute)=0; 

ElapsedTimeMin将显示结果英里nutes。您可以指定DATEDIFF()函数的“datepart”为“s”,以秒为单位获得结果。

希望这可能有所帮助。

0

SELECT DATEDIFF(MI,(CAST(TIME_STAMP)的日期时间),运行时)

0

例如,我们有这样一个例子:

CREATE TABLE Table1 (
    Time_Stamp datetime, 
    RunTimeMinute int 
) 
INSERT INTO Table1 VALUES           
('2016-03-01 04:32:10.000', 1), 
('2016-03-01 04:33:11.000', 2), 
('2016-03-01 04:34:13.000', 3), 
('2016-03-01 04:35:15.000', 4), 
('2016-03-01 04:36:16.000', 5), 
('2016-03-01 04:37:18.000', 6), 
('2016-03-01 04:38:20.000', 7), 
('2016-03-01 04:39:22.000', 8), 
('2016-03-01 04:40:23.000', 9), 
('2016-03-01 04:41:16.000', 0), 
('2016-03-01 04:45:36.000', 10), 
('2016-03-01 05:31:10.000', 1), 
('2016-03-01 05:35:11.000', 2), 
('2016-03-01 05:37:13.000', 3), 
('2016-03-01 05:39:15.000', 4), 
('2016-03-01 05:41:16.000', 5), 
('2016-03-01 05:46:18.000', 6), 
('2016-03-01 05:48:20.000', 7), 
('2016-03-01 05:51:22.000', 8), 
('2016-03-01 05:53:23.000', 9), 
('2016-03-01 05:55:16.000', 0), 
('2016-03-01 05:57:36.000', 10), 
('2016-03-02 05:34:09.000', 1), 
('2016-03-02 05:35:14.000', 2), 
('2016-03-02 05:36:11.000', 3), 
('2016-03-02 05:37:18.000', 4), 
('2016-03-02 05:38:20.000', 5), 
('2016-03-02 05:39:38.000', 6), 
('2016-03-02 05:40:40.000', 7), 
('2016-03-02 05:41:12.000', 8), 
('2016-03-02 05:42:32.000', 9), 
('2016-03-02 05:44:11.000', 0), 
('2016-03-02 05:47:38.000', 10) 

然后我们做出这样的:

;WITH cte AS (
    SELECT Time_Stamp, 
      RunTimeMinute, 
      ROW_NUMBER() OVER (PARTITION BY RunTimeMinute ORDER BY Time_Stamp) AS rnum 
    FROM Table1 
    WHERE RunTimeMinute IN (0,1) 
) 

SELECT MIN(Time_Stamp) as StartTime, 
     DATEDIFF(minute, MIN(Time_Stamp), MAX(Time_Stamp)) AS ElapsedTimeMin 
FROM cte 
GROUP BY rnum 

而得到这样的:

|    StartTime | ElapsedTimeMin | 
|-------------------------|----------------| 
| March, 01 2016 04:32:10 |    9 | 
| March, 01 2016 05:31:10 |    24 | 
| March, 02 2016 05:34:09 |    10 | 
相关问题