SQL-запрос все данные прошлого года и текущего года динамически - PullRequest
0 голосов
/ 01 ноября 2019
SELECT COUNT(shipment) as count, country as Origin, country as Destination,SHIPMENT_DATE, SHIPMENT_STATUS
FROM SHIPMENT
WHERE SHIPMENT_DATE > TO_DATE('31-12-17','DD-MM-RR')

Я хочу, чтобы этот запрос был динамическим, принимая все даты прошлого года и текущего года. Таким образом, в 2020 году он должен содержать только значения 2020 и 2019 и ничего больше 2018 года.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Использование COUNT недопустимо, поскольку вы выбираете другие неагрегированные столбцы, не используя также GROUP BY. Если мы удалим счет, мы можем попробовать:

SELECT
    country AS Origin,
    country AS Destination,
    SHIPMENT_DATE,
    SHIPMENT_STATUS
FROM SHIPMENT
WHERE SHIPMENT_DATE >= TRUNC(SYSDATE - INTERVAL '1' year, 'YEAR');
0 голосов
/ 01 ноября 2019

Вы можете переформатировать, используя to_char(sysdate,'RRRR')-1 в to_date() преобразовании:

SELECT shipment_date, shipment_status, load_country_code, unload_country_code,
       count(shipment) as "count"
  FROM shipment
 WHERE shipment_date  >= to_date( concat('01-01-',to_char(sysdate,'RRRR')-1) , 'DD-MM-RR')
 GROUP BY shipment_date, shipment_status, load_country_code, unload_country_code

обратите внимание, что я не сравнивал только часть года, но отформатировал как дату, поскольку таким образом мы делаемне раскрывать индекс в столбце shipment_day, если таковой существует.

Или другой вариант мог бы заменить

WHERE shipment_date >= to_date( concat('01-01-',to_char(sysdate,'RRRR')-1) , 'DD-MM-RR') на

WHERE shipment_date >= trunc(add_months(sysdate,-12),'RRRR')

в качестве альтернативы

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...