提取特定日期最后一小时的记录

Extract the record for last hour for specific date

我正在尝试从特定日期( BUS_DAT).

我有以下代码,但它会提取每小时的票数 (TKT_NO)。我只想过滤最后一个小时。这是我使用的代码:

Select count(TKT_NO) AS SAL_TKTS, 
  DATEPART(HOUR, (TKT_DT))AS SAL_HR
FROM PS_TKT_HIST
WHERE BUS_DAT = '2022-03-30'
GROUP By DATEPART (HOUR, TKT_DT)

我得到了流畅的结果

SAL_TKTS    SAL_HR
5             10
1             11
3             12
5             13
10            14
13            15
23            16
18            17
12            18
6             19
6             20
4             21

我只想获取最后一个小时(21)的记录(4)

如果您只想要某一天最后一小时的票数:

DECLARE @date date = '20220330';

SELECT COUNT(*)
  FROM dbo.PS_TKT_HIST
  WHERE BUS_DAT = @date
  AND TKT_DAT >= DATEADD(HOUR, 23, CONVERT(datetime2, @date));

除最后一小时(比方说,晚上 9 点)以外的任何时间:

WHERE BUS_DAT = @date
  AND TKT_DAT >= DATEADD(HOUR, 21, CONVERT(datetime2, @date))
  AND TKT_DAT <  DATEADD(HOUR, 22, CONVERT(datetime2, @date));

如果“最后一小时”不是指晚上 11 点,而是最后一小时有促销活动,则您必须这样做:

DECLARE @date date = '20220330';

SELECT TOP (1) COUNT(*)
  FROM dbo.PS_TKT_HIST
  WHERE BUS_DAT = @date
  GROUP BY DATEPART(HOUR, TKT_DAT)
  ORDER BY DATEPART(HOUR, TKT_DAT) DESC;