Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: найти отсутствующие записи
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » найти отсутствующие записи

Страниц (1): [1]
 

1. rgl - 22 Декабря, 2020 - 12:41:57 - перейти к сообщению
Понятно, что все что я хочу, легко делается с помощью языка программирования, напр. PHP, но ради спортивного интереса, можно ли это сделать одним запросом на SQL?

Итак, есть таблица с некими данными, одно из полей - дата-время. Хочется получить список дат (за заданный небольшой промежуток времени), для которых записей в таблице нет.

Напр. есть записи
"2020-12-01 15:25:26", другие поля"
"2020-12-02 12:42:11", другие поля
"2020-12-04 11:33:42", другие поля
"2020-12-05 05:24:36", другие поля
"2020-12-07 07:15:56", другие поля
"2020-12-08 03:11:27", другие поля

Я хочу сделать запрос, задав исходный диапазон "2020-12-01" "2020-12-07" и получить результат "2020-12-03", "2020-12-06"
2. Мелкий - 28 Декабря, 2020 - 10:38:30 - перейти к сообщению
Раз не указали СУБД, предположим что это postgresql.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT d FROM generate_series('2020-12-01', '2020-12-07', interval '1 day') d WHERE NOT EXISTS (SELECT FROM tablename WHERE created_at >= d AND created_at < d + interval '1 day')
3. rgl - 12 Января, 2021 - 11:13:52 - перейти к сообщению
Мелкий пишет:
Раз не указали СУБД, предположим что это postgresql.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT d FROM generate_series('2020-12-01', '2020-12-07', interval '1 day') d WHERE NOT EXISTS (SELECT FROM tablename WHERE created_at >= d AND created_at < d + interval '1 day')

generate_series в MySQL не работает. Сдался, сделал все что надо на PHP

 

Powered by ExBB FM 1.0 RC1