用于计算同一表的两行之间的DateTime差异的SQL语句

时间:2016-03-28 15:28:03

标签: sql sql-server subquery datediff

表1中有2列:Time_StampRunTimeMinute。如何从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

3 个答案:

答案 0 :(得分:0)

SELECT DATEDIFF(mi,(cast(Time_STAMP)as Datetime),RunTime)

答案 1 :(得分:0)

要完成您描述的任务(假设<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.19.1</version> <configuration> <parallel>methods</parallel> <threadCount>${threads}</threadCount> <systemPropertyVariables> <browser>MYSYSTEMPROPERTY</browser> <!--Set properties passed in by the driverbinary downloader--> <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver> <webdriver.ie.driver>${webdriver.ie.driver}</webdriver.ie.driver> <webdriver.opera.driver>${webdriver.opera.driver}</webdriver.opera.driver> </systemPropertyVariables> <includes> <include>**/*WD.java</include> </includes> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> 字段的类型为Time_StampDateTime是整数),您可以使用SQL RunTimeMinute Query /子查询技术和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函数的“datepart”指定为“s”以在几秒钟内获得结果。

希望这可能会有所帮助。

答案 2 :(得分: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 |