2016-03-28 4 views
2

У меня есть 2 столбца в таблице 1: Time_Stamp и RunTimeMinute. Как можно вычесть значение Time_Stamp, где RunTimeMinute = 0 из значения Time_Stamp, соответствующего RunTimeMinute = 1 (что даст мне время, затраченное на то, чтобы запустить машину)?Заявление SQL для вычисления значения DateTime между двумя строками одной и той же таблицы

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

ли вы представить, по крайней мере Math формулу задачи, которую вы пытаетесь выполнить в SQL? –

+0

Microsoft SQL Server – Greenitguy

+0

Я хочу потратить время, в течение которого RunTimeMintue = 0 и вычесть его с момента, когда RunTimeMinue = 1. – Greenitguy

ответ

0

Для выполнения этой задачи вы описали (при условии, что Time_Stamp поле тип DateTime и RunTimeMinute является целым числом) , вы можете использовать SQL SELECT Query/подзапрос технику и 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. Вы можете указать «datepart» функции DATEDIFF() как «s», чтобы получить результат в секундах.

Надеюсь, это поможет.

0

ВЫБРАТЬ DATEDIFF (миль (литая (Time_STAMP), как DateTime), RunTime)

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 |