Результат группового запроса на основе истекшего времени? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица заказов с полем даты и времени заказа, я хочу сгруппировать результат по дате заказа до и после сегодняшнего дня.и после этого я хочу отсортировать заказ после сегодняшнего дня по идентификатору клиента ASC и отсортировать заказ до сегодняшнего дня по идентификатору клиента DESC.

Таблица заказов выглядит следующим образом:

table orders

Я пытался упорядочить запрос до и после сегодняшнего дня, и я комбинирую результат, используя UNION, но все еще не получаю результат, как то, что я хочу

Я пробовал запросить отдельно как порядок, так и до и послесегодня.например, следующий код:

Сначала я запрашиваю заказ после сегодняшнего дня следующим образом:

select OrderID, CustomerID, OrderDate, ShipName, ShipCountry
from Orders
WHERE OrderDate > GETDATE() AND ShipCountry = 'USA'
ORDER BY CustomerID ASC

и результат выглядит так:

query result order after today

и затем я снова запрашиваю вот так:

select OrderID, CustomerID, OrderDate, ShipName, ShipCountry
from Orders
WHERE OrderDate < GETDATE() AND ShipCountry = 'USA'
ORDER BY CustomerID DESC

и результат выглядит так:

query result order before today

но я не знаю, как присоединитьсяоба из двух приведенных выше результатов запроса с одним запросом вместо отдельного запроса.

В моем результате запроса я ожидаю сочетания результата запроса до сегодняшнего дня и результата запроса после сегодняшнего дня.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Вы можете разделить order by на 2 части:

select OrderID, CustomerID, OrderDate, ShipName, ShipCountry
from Orders
WHERE  ShipCountry = 'USA'
ORDER BY
 (CASE WHEN OrderDate < GETDATE() 
   THEN CustomerID 
    END) DESC 
,   (CASE WHEN OrderDate > GETDATE() 
   THEN CustomerID 
    END) ASC
0 голосов
/ 19 сентября 2019

Старые ответы ..

  select OrderID, CustomerID, OrderDate, ShipName, ShipCountry
    from Orders
    WHERE OrderDate <> GETDATE() AND ShipCountry = 'USA'
    ORDER BY CustomerID DESC

Примечание: - использование не равно Оператору для этого .. тогда вы получите весь результат, отличный от сегодняшней даты...

Новые ответы ...

Как вы сказали ... вы можете использовать Order by Clause с UNION ..... вам нужноставить рекорды ...

SELECT orders1.OrderID,orders1.CustomerID, orders1.OrderDate, orders1.ShipName, orders1.ShipCountry FROM
(    
SELECT TOP 100 OrderID, CustomerID, OrderDate, ShipName, ShipCountry
from Orders
WHERE OrderDate > GETDATE() AND ShipCountry = 'USA'
ORDER BY CustomerID ASC
)orders1

UNION 

SELECT orders2.OrderID, orders2.CustomerID, orders2.OrderDate, orders2.ShipName,orders2.ShipCountry FROM
(
SELECT TOP 100 OrderID, CustomerID, OrderDate, ShipName, ShipCountry
from Orders
WHERE OrderDate < GETDATE() AND ShipCountry = 'USA'
ORDER BY CustomerID DESC
)orders2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...