Расчет разницы между двумя датами в SQLite на основе нескольких условий
Пожалуйста , рассмотрите следующий вопрос о расчете разницы между двумя датами в SQLite:
У меня есть таблица со следующей информацией, где у меня есть 2 разных случая. Каждый из проектов в этой таблице представляет 1 из 2 возможных случаев.
Project name | date | date1 | StageDuration* (header row)
Project1 | 2018-12-01 |-(no date or NULL) |16
Project2 | 2018-12-14 | 2018-12-06 |3
Project2 | 2018-11-30 | 2018-12-06 |3
Для проекта 2 (2-й случай) возможны 2 строки, потому что данная таблица является результатом левого соединения. Имя проекта и столбец даты взяты из таблицы table1, а имя проекта, столбцы date1, StageDuration взяты из таблицы 2. В случае, если у меня есть более 1 строки в table1 и 1 строка в таблице 2, я получаю 2 строки в объединенной таблице (как в этом пример).
В настоящее время я использую следующий код SQLite, чтобы получить Duration для case1/project1:
select *,
case when `date` IS NULL then `StageDuration` else '' end
as "Duration"
from report
Это работает для проекта1. Проблема, которую я хочу решить, состоит в том, чтобы адаптировать код и включить в него условие для второго случая (project2).
Я ожидаю, что будет работать
if count(dates from report 1/date)>count(dates from report 2/date1)
разница должна быть (продолжительность мне нужна) рассчитывается как
today - max(JULIANDAY(`date`))
Буду очень признателен за вашу помощь. Это мой второй вопрос здесь. Спасибо за ваше время и понимание заранее.
1 ответ
Получить максимальную дату из подзапроса и присоединиться к ней по имени проекта, а затем использовать эту дату для расчета продолжительности
SELECT t1.*, proj_date1, stage_duration,
CASE WHEN proj_date IS NULL then stage_duration
ELSE julianday(date('now')) - julianday(max_date)
END as "Duration"
FROM table1 t1
JOIN table2 t2 ON t1.proj_name = t2.proj_name
JOIN (SELECT proj_name, MAX(proj_date) as max_date
FROM table1
GROUP BY proj_name) AS s ON t1.proj_name = s.proj_name
Я использовал свои собственные имена таблиц / столбцов, но надеюсь, что запрос все равно имеет смысл