Есть идеи, как я могу извлечь даты, относящиеся к предыдущей неделе, из сегодняшней даты?

#sql #postgresql #date

#sql #postgresql #Дата

Вопрос:

У меня есть таблица «даты» с идентификаторами и датами: (даты указаны во временной метке)

 id start_date
1  2020-11-23 11:00:00
2  2020-11-23 12:00:00
3  2020-11-15 10:00:00
4  2020-11-24 09:00:00
5  2020-11-11 09:00:00
6  2020-11-24 13:00:00
7  2020-11-25 15:00:00
 

код должен возвращать идентификаторы:

 id
 1
 2
 4
 6
 7
 

я попробовал следующее:

 select id
from dates
where dates.start_date > DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW()) 6 DAY) 
AND dates.start_date <= DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-1 DAY)
 

но, похоже, это не сработало. У меня синтаксическая ошибка:

ОШИБКА: синтаксическая ошибка в или около «DAYOFWEEK»

Рассмотрим сегодняшнюю дату: 2020-11-26 Я также использую PostgreSQL!

Комментарии:

1. Где в руководстве вы нашли функции date_sub() и dayofweek() ?

2. Когда вы говорите «с прошлой недели», вы имеете в виду 1 неделю до настоящего времени, предыдущий период с понедельника по воскресенье или предыдущий период с воскресенья по субботу? Некоторые страны начинают отсчет недели с воскресенья, некоторые — с понедельника, а некоторые, я думаю, и в другие дни.

3. через 1 неделю

4. я нашел функции здесь, в stack overflow, потому что кто-то задал тот же вопрос, и это был ответ

Ответ №1:

Кажется, вы хотите:

 select id
from t
where t.start_date > current_date - interval '7 day';
 

Или, возможно — в зависимости от того, как вы определяете «неделю».:

 where t.start_date >= date_trunc('week', current_date) - interval '7 day' and
      t.start_date < date_trunc('week', current_date)