Выберите записи в предыдущем 12-часовом окне - PullRequest
0 голосов
/ 21 октября 2019

У меня есть таблица в структуре ниже,

Id      Name      Created_Date
1       AAA       10/20/2019 3:00:00
2       BBB       10/20/2019 15:00:00
3       CCC       10/21/2019 4:00:00
4       DDD       10/21/2019 18:00:00

Мне нужен один запрос, который должен возвращаться на основе текущей даты и времени, например:

Случай 1: Текущая дата равна 10/ 21/2019 и время в AM, необходимо вернуть Предыдущая дата (20.10.2009), Вторая половина (20.10.2009 с 12:00:01 по 20.10.2009 23:59:59). В нашем случае запись «BBB» должна быть возвращена.

Случай 2: текущая дата - 21.10.2009, а время в PM, необходимо вернуть текущую дату (21.10.2009),Первая половина (с 21.10.2009 00:00:01 по 21.10.2009 11:59:59). В нашем случае запись "CCC" должна быть возвращена.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Попробуйте

SELECT ID,Name, Created_Date
FROM
 (
      SELECT *, CASE WHEN DATEDIFF(Hour, GETDATE() ,Created_Date) < 0 AND DATEDIFF(Hour, GETDATE() ,Created_Date) >= -12  THEN Created_Date ELSE NULL END AS ComputedColumn
      FROM Tbl
 ) X WHERE ComputedColumn IS NOT NULL

SQL FIDDLE

1 голос
/ 21 октября 2019

Попробуйте,

DECLARE @Temp_Table TABLE
(
    Id INT,Name VARCHAR(10),Created_Date DATETIME
)
INSERT INTO @Temp_Table
SELECT 1,'AAA','10/20/2019 3:00:00 ' UNION ALL
SELECT 2,'BBB','10/20/2019 15:00:00' UNION ALL
SELECT 3,'CCC','10/21/2019 4:00:00 ' UNION ALL
SELECT 4,'DDD','10/21/2019 18:00:00' 

DECLARE @DATE_TIME DATETIME='10/21/2019 18:00:00'

SELECT  *
FROM @Temp_Table
WHERE Created_Date BETWEEN IIF(DATEPART(HOUR,@DATE_TIME) >12,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME),DATEADD(HOUR,12,DATEADD(DAY,-1,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME))))
AND IIF(DATEPART(HOUR,@DATE_TIME) >12,DATEADD(HOUR,12,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME)),CAST(CAST(@DATE_TIME AS DATE) AS DATETIME))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...