0

私は以下のようなテーブルを持っています:

    GroupOrderID    Station           Date
-----------------------------------------------
    28797   NB003   2013-01-03 12:53:00
    28797   NB003   2013-01-03 17:12:00
    28797   NB003   2013-01-04 14:45:00
    28797   NB003   2013-01-04 15:57:00
    28797   NB003   2013-01-06 16:08:00
    28797   NB003   2013-01-07 10:28:00
    28797   NB003   2013-01-07 10:29:00
    28797   CRM220  2013-01-07 16:31:00
    28797   CRM220  2013-01-07 17:04:00
    28797   CRM220  2013-01-07 17:04:00
    28797   CRM220  2013-01-07 17:04:00
    28797   CRM220  2013-01-07 17:04:00
    28797   CRM220  2013-01-07 17:24:00
    28797   CRM220  2013-01-07 17:24:00
    28797   STEENOVE    2013-01-11 11:03:00

2 つの日付の時間差を秒単位で取得したい。ステーション NB003 と同様に、CRM220 にはそれぞれ最初と最後の日付があり、秒単位の差が必要です。

4

2 に答える 2

2

max()関数とmin()集計関数を適用してから使用DateDiff()すると、結果を取得できるはずです。

select GroupOrderID, 
  station,
  datediff(ss, MinDate, MaxDate) DiffSeconds
from
(
  select GroupOrderID, 
    station, 
    min(date) MinDate,
    Max(Date) MaxDate
  from yourtable
  group by GroupOrderID, Station
) src

デモで SQL Fiddle を参照してください

結果は次のとおりです。

| GROUPORDERID |  STATION | DIFFSECONDS |
-----------------------------------------
|        28797 |   CRM220 |        3180 |
|        28797 |    NB003 |      336960 |
|        28797 | STEENOVE |           0 |

各日付の違いを知りたい場合は、このクエリをもう 1 ステップ実行できます。

select GroupOrderID, 
  station,
  Date,
  datediff(ss, MinDate, MaxDate) DiffSeconds
from
(
  select GroupOrderID, 
    station,
    Cast(date as date) date,
    min(date) MinDate,
    Max(Date) MaxDate
  from yourtable
  group by GroupOrderID, Station, Cast(date as date)
) src
order by date

デモで SQL Fiddle を参照してください

結果は次のとおりです。

| GROUPORDERID |  STATION |       DATE | DIFFSECONDS |
------------------------------------------------------
|        28797 |    NB003 | 2013-01-03 |       15540 |
|        28797 |    NB003 | 2013-01-04 |        4320 |
|        28797 |    NB003 | 2013-01-06 |           0 |
|        28797 |   CRM220 | 2013-01-07 |        3180 |
|        28797 |    NB003 | 2013-01-07 |          60 |
|        28797 | STEENOVE | 2013-01-11 |           0 |
于 2013-01-11T10:51:03.667 に答える
0
;with CTE(GroupOrderId, station, Date , r_asc, r_desc) as 
(
select GroupOrderId, station, Date , row_number() over(partition by GroupOrderId, station order by date ) as r_asc, row_number() over(partition by GroupOrderId, station order by date desc) as r_desc
from #temp
)
select a.GroupOrderId, a.station, datediff(SECOND, a.date, b.date)
from CTE a join CTE b on a.GroupOrderId = b.GroupOrderId and a.station = b.station and a.r_asc =1 and b.r_desc = 1 
于 2013-01-11T10:59:52.477 に答える