postgresql сравнение дат: ошибка: оператор не существует: дата> целое число - PullRequest
0 голосов
/ 13 сентября 2018

Может ли кто-нибудь помочь мне с форматированием следующих запросов postgreql другим способом?

SELECT count(o.product_id), p.title FROM orders o, products p WHERE 
p.product_id = o.product_id AND o.order_date > current_date - 7 
GROUP BY p.title;

SELECT sum(p.price) AS total, o.order_date from products p, orders o 
WHERE p.product_id = o.product_id AND o.order_date > current_date - 7 
GROUP BY order_date;

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

error: operator does not exist: date > integer

Вот копия схемы таблицы

orders(id PRIMARY KEY, order_number INTEGER, product_id INTEGER, user_id INTEGER,
tracking_id VARCHAR(50), order_date DATE)

products(product_id PRIMARY KEY, title VARCHAR(200), description VARCHAR(2500),
price NUMERIC(7,2), img TEXT, brand VARCHAR(50), horsepower INTEGER, 
deck_size INTEGER, product_type VARCHAR(5))

Product_id в таблице заказов ссылается на product_id в продуктах.

Вот скриншоты таблиц для визуализации:

table definitions

1 Ответ

0 голосов
/ 13 сентября 2018

Я удивлен, что ваш запрос был запущен где угодно. Если вы хотите вычесть 7 дней из отметки времени, вы должны использовать:

current_date - INTERVAL '7 DAY'

Так что используйте этот запрос:

SELECT
    p.title,
    COUNT(o.product_id)
FROM orders o
INNER JOIN products p
    ON p.product_id = o.product_id
WHERE 
    o.order_date > current_date - INTERVAL '7 DAY'
GROUP BY
    p.title;

Примечание. Я заменил ваше неявное соединение старой школы современным явным внутренним соединением. На данный момент это предпочтительный способ написания объединения.

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