ShelestovAnt
@ShelestovAnt
Верстаю и программирую

Можно ли собрать такой запрос?

Всем привет!
Может подсказать как составить sql запрос чтобы можно было получить следующее(2й блок "Рекорды"):
5ee8ffd3c3e8d184247430.jpeg

Т.е. есть таблица с полями:
id, done(boolean), date(YYYY-MM-DD)

Хочу составить запрос который сможет выдать что-то вроде такого:
date_start, count, date_end
limit 10
Ну как все в блоке "Рекорды"

Возможно ли такое?
Спасибо!
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
SELECT pairs.startDate, pairs.endDate, pairs.endDate - pairs.startDate + 1 as count FROM
(SELECT t1.date as startDate, MIN(t3.date) as endDate FROM statistics as t1
   LEFT JOIN statistics t2 ON t1.date - t2.date = 1 and t2.done = 1
   LEFT JOIN statistics as t3 ON t1.date <= t3.date and t3.done = 1
     LEFT JOIN statistics as t4 ON t3.date - t4.date = -1 and t4.done = 1
WHERE t1.done = 1 AND ISNULL(t2.date) AND ISNULL(t4.date)
GROUP BY t1.date) as pairs
ORDER BY pairs.startDate


Объяснение:
1) Находим все записи t1, у которых нет записей с предыдущим днем t2
2) Соединяем с записями t3, у которых нет записей с последующим днем t4 и дата которых больше t1
3) Считаем для записей из t1 минимум даты из t3
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Судя по https://www.sqlitetutorial.net/sqlite-window-funct... sqlite уже умеет lag/lead - тогда все должно получиться вполне изящно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы