Вы чрезмерны. Чтобы получить данные за прошлую неделю, просто получите все после «начала этой недели» минус 7 дней:
«Начало этой недели» можно оценить, используя date_trunc('week', current_date)
.
Если вы вычтите 7 дней, вы получите начало предыдущей недели: date_trunc('week', current_date) - interval '7' day
. Если вы вычтите 1 день, вы получите конец прошлой недели.
date_trunc
всегда использует понедельник в качестве начала недели, поэтому, если ваша неделя начинается в воскресенье, просто отбросьте еще один, например. date_trunc('week', current_date)::date - 8
будет воскресенье предыдущей недели
Собирает все вместе, вы получите:
SELECT count(*), extract(day from createdon) AS period
FROM orders
WHERE servicename =:serviceName
AND createdon
between date_trunc('week', current_date)::date - 7
and date_trunc('week', current_date)::date - 1
GROUP BY extract(day from createdon)
ORDER BY extract(day from createdon);
Если столбцы временных меток столбцов вы можете просто брошенные createdon
на сегодняшний день, чтобы избавиться от времени части:
AND createdon::date
between date_trunc('week', current_date)::date - 7
and date_trunc('week', current_date)::date
Обратите внимание, что обычный индекс createdon
не будет использоваться для этого условия, вам нужно будет создать индекс createdon::date
если вам нужна производительность.
Если вы не можете (или не хотите) создать такой индекс, вам нужно использовать что-то другое, то between
AND createdon >= date_trunc('week', current_date)::date - 7
AND createdon < date_trunc('week', current_date)::date
(Обратите внимание на использование <
вместо <=
который является то, что ` между использует)
Другой вариант заключается в преобразовании информации о дате в комбинации недели и года:
AND to_char(createdon, 'iyyy-iw') = to_char(date_trunc('week', current_date)::date - 7, 'iyyy-iw')
Обратите внимание, что я использовал ISO week definition для вышеуказанного. Если вы используете другую систему нумерации в неделю, вам нужен другой format mask для функции to_char()
.
Ваш - 7 должен быть после скобки, потому что теперь он ищет тип данных INTEGER-7. –
Я попробовал, но по-прежнему ту же ошибку .... Ребенок – nandhini
Marc i changed ... но он показывает ту же ошибку с «\ n» в позиции 127 – nandhini