これは、そのクエリで SeqNum が 1 または 2 であることを意図していないためです。シーケンス番号は、その 1 または 2 の値に基づいてデータを分割したときの行番号です。これは、mins < 30 のすべての値がセットに分割され、Deal によって並べ替えられ、1 から N までの番号が付けられることを意味します。Deal >= 30 についても同じことが行われます。
やりたいことを行うには、日付、時間、および 1 または 2 の値で分割して、個々の 30 分ごとのレコードがセットに分割され、番号が付けられるようにする必要があります。 30分ごとに最初のレコード。
seqnum を次のように変更してみてください。
row_number() over (partition by
CAST(Deal AS DATE)
, DATEPART(HOUR, Deal)
, case when (datepart(minute, Deal) < 30) then 1 else 2 end
order by Deal ASC)
as seqnum
ここでは、読みやすくするために非常に多くの行に分割しています。
シーケンス番号が何をしているかを表示するには、次を実行してみてください。
select md.*
,CAST(Deal AS DATE) AS [Date]
,DATEPART(HOUR, Deal) AS [Hour]
,case when (datepart(minute, Deal) < 30) then 1 else 2 END AS [WhichHalf]
,row_number() over (partition by
CAST(Deal AS DATE)
, DATEPART(HOUR, Deal)
, case when (datepart(minute, Deal) < 30) then 1 else 2 end
order by Deal ASC)
as seqnum
from MyData md
where Product = 'XXXXX' AND
CAST(Deal AS Date) = '2013-09-04'
ORDER BY Deal
シーケンス番号がそこで何をしているのかを明らかにするのに十分なデータがあることを願っています。(Deal=12:01 のレコードには SeqNum=1 の番号が付けられ、その後のすべてのレコードには 2、3、4 の番号が付けられます... 12:30 を過ぎた時点で再び 1 にリセットされるまで)