【问题标题】:SQL datediff for row items行项目的 SQL datediff
【发布时间】:2014-11-19 06:52:59
【问题描述】:

我发现编写 SQL 语句来计算每行的时间有困难。

我的表结构很简单:

TblProduct(Product nvarchar(50), Serial nvarchar(50), Time_Checked datetime)

以下是我的示例数据:-

PRODUCT1 Serial1 2014-04-02 07:01:21.000
PRODUCT1 Serial2 2014-04-02 07:02:21.000
PRODUCT1 Serial3 2014-04-02 07:03:21.000
PRODUCT2 Serial1 2014-04-02 08:01:21.000
PRODUCT2 Serial2 2014-04-02 08:02:21.000
PRODUCT2 Serial3 2014-04-02 08:03:21.000
PRODUCT3 Serial1 2014-04-02 09:01:21.000
PRODUCT3 Serial2 2014-04-02 09:02:21.000
PRODUCT3 Serial3 2014-04-02 09:03:21.000
PRODUCT1 Serial4 2014-04-02 10:01:21.000
PRODUCT1 Serial5 2014-04-02 10:02:21.000
PRODUCT2 Serial6 2014-04-02 10:03:21.000

我想通过datediff(minute,start time, end time)计算更换产品的时间 其中开始时间作为每个系列产品种类的最后一项

开始时间:PRODUCT1 2014-04-02 07:03:21.000

结束时间:PRODUCT2 2014-04-02 08:01:21.000

==>datediff(minute,start time, end time)=58 minutes

最后,我想返回如下表所示的结果:-

PRODUCT1 Serial3 PRODUCT2 Serial1 58(minutes)
PRODUCT2 Serial3 PRODUCT3 Serial1 58(minutes)
PRODUCT3 Serial3 PRODUCT4 Serial4 58(minutes)

【问题讨论】:

  • 是 sql server 2012 还是 2008 或者您想要一个可以同时兼容两者的解决方案?

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012


【解决方案1】:

Here 是一个可以在 sql server 2008 和 2012 上运行的解决方案:

;WITH cte_temp
     AS (SELECT *,
                ROW_NUMBER()
                  OVER (
                    ORDER BY Time_Checked) AS rownum
         FROM   TblProduct)
SELECT t1.Product,
       t1.Serial,
       t2.Product,
       t2.Serial,
       Datediff(MINUTE, t1.Time_Checked, t2.Time_Checked) AS DiffInMinutes
FROM   cte_temp t1
       JOIN cte_temp t2
         ON t1.rownum + 1 = t2.rownum
WHERE  t1.Product <> t2.Product 

cte_temp 中的查询将按照Time_Checked 的升序为每一行分配一个递增编号,t1.rownum + 1 = t2.rownum 上的cte_temp 的自连接结果将当前行与下一行匹配。最后,where 子句将过滤掉所需的行。

注意:如果您使用的是 sql server 2012,可以使用 lead()lag() 函数完成相同的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多