SQL - как группировать транзакции по определенному шаблону даты? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть таблица с данными транзакций и я хочу посчитать количество записей для каждой транзакции. Формат даты выглядит следующим образом: 2018-11-12T01:07:36.000+0000

Я пробовал этот запрос, но он ничего не возвращает. В чем может быть проблема с моим запросом?

Я ожидаю, что результат будет выглядеть как transaction_date, number_of_transactions

SELECT 
transaction_date, COUNT(*)
FROM main.transactions 
WHERE transaction_date LIKE 2018-11-30
GROUP BY 
transaction_date
ORDER BY COUNT(*) DESC;

UPD: Также возможно ли группировать по дате и каждому часу даты (от 00 до 23)?

Ответы [ 4 ]

0 голосов
/ 02 ноября 2018

Обрезать часть времени, чтобы получить дату:

SELECT 
transaction_date::date, COUNT(*) xact_count
FROM main.transactions 
WHERE transaction_date::date = '2018-11-30'::date
GROUP BY 
transaction_date::date
ORDER BY 2 DESC;

И использовать равенство для отметки даты, а не для строковой функции "LIKE"

Я видел ваш вопрос ниже о почасовой группировке.

SELECT 
date_trunc('hour',transaction_date), COUNT(*) xact_count
FROM main.transactions 
GROUP BY 
date_trunc('hour', transaction_date)
ORDER BY 2 DESC;
0 голосов
/ 02 ноября 2018

Вы должны включить trunc(transaction_date) в пункт where. trunc удалит часть времени в вашей дате, так как в настоящее время она принимает дату-время, n вы соответствуете только дате, поэтому она, скорее всего, не даст результата.

0 голосов
/ 02 ноября 2018

Используйте дату с quotation как '2018-11-30' или date'2018-11-30'

with transactions(transaction_date) as
(
 SELECT timestamp'2018-11-30T01:07:36.000+0000' union all
 SELECT timestamp'2018-11-30T03:28:36.000+0000' union all
 SELECT timestamp'2018-11-12T03:28:36.000+0000'   
)
SELECT transaction_date::date, 
       COUNT(*) as number_of_transactions
  FROM transactions 
 WHERE date_trunc('day', transaction_date::date) = date'2018-11-30'
 GROUP BY transaction_date::date
 ORDER BY number_of_transactions DESC;

transaction_date    number_of_transactions
------------------- ----------------------
30.11.2018 00:00:00          2 

и попробуйте использовать псевдоним для своих ORDER BY предложений.

Вы также можете предпочесть WHERE условие

WHERE cast(transaction_date as date) = '2018-11-30' как другой альтернативный стиль.

Rextester Demo

0 голосов
/ 02 ноября 2018

Вы можете попробовать использовать функцию date () ниже

SELECT 
date(transaction_date) as tdate, COUNT(*)
FROM main.transactions 
WHERE date(transaction_date) ='2018-11-30'
GROUP BY 
date(transaction_date)
ORDER BY COUNT(*) DESC;

ИЛИ

SELECT 
    transaction_date::date, COUNT(*)
    FROM main.transactions 
    WHERE transaction_date::date ='2018-11-30'
    GROUP BY 
    transaction_date::date
    ORDER BY COUNT(*) DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...