SQL 计算相同的两行之间的日期时间差异的语句 Table
SQL Statement to Calculate DateTime Difference between Two Rows of the same Table
我在表 1 中有 2 列:Time_Stamp
和 RunTimeMinute
。如何从对应于 RunTimeMinute=1 的 Time_Stamp
值中减去 RunTimeMinute=0 的 Time_Stamp
值(这将给我获得机器 运行 所花费的时间)?
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
SELECT DATEDIFF(mi,(cast(Time_STAMP) as Datetime),RunTime)
要完成您所描述的任务(前提是 Time_Stamp
字段是 DateTime
类型且 RunTimeMinute
是整数),您可以使用 SQL SELECT
Query/Subquery 技术和 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
将以分钟为单位显示结果。您可以将 DATEDIFF()
函数的 "datepart" 指定为 "s" 以在几秒钟内获得结果。
希望这可能有所帮助。
例如我们有这样一个示例:
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 |
我在表 1 中有 2 列:Time_Stamp
和 RunTimeMinute
。如何从对应于 RunTimeMinute=1 的 Time_Stamp
值中减去 RunTimeMinute=0 的 Time_Stamp
值(这将给我获得机器 运行 所花费的时间)?
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
SELECT DATEDIFF(mi,(cast(Time_STAMP) as Datetime),RunTime)
要完成您所描述的任务(前提是 Time_Stamp
字段是 DateTime
类型且 RunTimeMinute
是整数),您可以使用 SQL SELECT
Query/Subquery 技术和 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
将以分钟为单位显示结果。您可以将 DATEDIFF()
函数的 "datepart" 指定为 "s" 以在几秒钟内获得结果。
希望这可能有所帮助。
例如我们有这样一个示例:
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 |