Интервал дат SQL не работает с предложением AND - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь посчитать просмотры за промежуток времени.Запрос ниже работает только без AND предложения

Если я достану AND s.timestamp < 2019-01-31, он работает просто отлично.

SELECT s.category_id, c.name, count(s.category_id) AS ViewCount 
FROM stat_product_category s 
JOIN category c ON s.category_id = c.id 
WHERE s.timestamp > 2019-01-01 AND s.timestamp < 2019-01-31
GROUP BY s.category_id 
ORDER By ViewCount Desc 
LIMIT 10

Ответы [ 3 ]

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

Это не временные метки - без кавычек у вас просто есть пара целых чисел, которые вы вычитаете. 2019-01-01 оценивается как 2019-1-1 или 2017. 2019-01-31 оценивается как 2019-1-31 или 1987. Нет числа, которое больше чем 2017, но меньше, чем 1987, так что вы получите Нет результатов. Окружение этих значений кавычками сделает их строковыми литералами и позволит базе данных выполнить неявное преобразование в дату:

SELECT s.category_id, c.name, count(s.category_id) AS ViewCount 
FROM stat_product_category s 
JOIN category c ON s.category_id = c.id 
WHERE s.timestamp > '2019-01-01' AND s.timestamp < '2019-01-31'
-- Here ------------^----------^-------------------^----------^
GROUP BY s.category_id 
ORDER By ViewCount Desc 
LIMIT 10
0 голосов
/ 20 января 2019

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

SELECT s.category_id, c.name, count(s.category_id) AS ViewCount 
FROM stat_product_category s 
JOIN category c ON s.category_id = c.id 
WHERE s.timestamp > '2019-01-01' AND s.timestamp < '2019-01-31'
GROUP BY s.category_id 
ORDER By ViewCount Desc 
LIMIT 10

(проверено и работает!)

Удачи в проекте!

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

вам нужна одинарная кавычка на дату

SELECT s.category_id, c.name, count(s.category_id) AS ViewCount 
FROM stat_product_category s 
JOIN category c ON s.category_id = c.id 
WHERE s.timestamp > '2019-01-01' AND s.timestamp <'2019-01-31'
GROUP BY s.category_id ,c.name
ORDER By ViewCount Desc 
LIMIT 10
...