Сортировать недельные данные по дате в Amazon Redshift - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь отсортировать данные по дате, хотя в скрипте есть только недельные данные.

Ниже приведен пример SQL:

SELECT
  CONCAT(CONCAT('Week', ''), 
         EXTRACT(WEEK FROM sale_date ::date + '1 day'::interval)
        ),
  COUNT(*)
FROM sales
WHERE sale_date between '2018-12-29' AND '2019-01-04'
GROUP BY CONCAT(CONCAT('Week', ''), 
                EXTRACT(WEEK FROM sale_date ::date + '1 day'::interval)
               )
ORDER BY 1 ASC

Приведенный выше скрипт работает нормально, но когдаон сортирует окончательный результат, он сортирует первую неделю и последнюю неделю 52, скорее я пытаюсь отсортировать по фактической дате, чтобы W52 появлялся первым (с 2018 по 12), а W1 - последним.

Текущий вывод:

Week1,101
Week52,2350

Ожидаемый результат:

Week52,2350
Week1,101

Я использую Amazon Redshift DB.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Это должно работать:

SELECT week, count FROM (
    SELECT week, MAX(sale_date) max_date, COUNT(*) count FROM (
        SELECT sale_date,
            CONCAT('Week', EXTRACT(WEEK FROM sale_date::date + '1 day'::interval)) AS week
        FROM sales
        WHERE sale_date between '2018-12-29' AND '2019-01-04'
    )
    GROUP BY week
) ORDER BY max_date ASC

Получил бы странные результаты, если бы каждый интервал превышал год.

0 голосов
/ 30 января 2019

Это может быть нормально для вас, требуется добавить дополнительный столбец к запросу

select date_trunc('WEEK',sale_date ::date + interval '1 day'),
  CONCAT(CONCAT('Week', ''),
              EXTRACT(WEEK FROM sale_date  ::date + '1 day'::interval)),
       count(*)
from sales
where sale_date  between '2018-12-29' and '2019-01-04'
group by date_trunc('WEEK',sale_date ::date+ interval '1 day'),
         CONCAT(CONCAT('Week', ''),
                EXTRACT(WEEK FROM sale_date  ::date + '1 day'::interval))
order by date_trunc('WEEK',sale_date ::date+ interval '1 day') asc;
...