Расчет разницы между двумя датами в SQLite на основе нескольких условий - PullRequest
0 голосов
/ 17 декабря 2018

рассмотрите следующую проблему при расчете разницы между двумя датами в 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

Это работает для project1.Проблема, которую я хочу решить, состоит в том, чтобы адаптировать код и включить в него условие для второго случая (project2).

Я ожидаю, что сработает условие:

if count(dates from report 1/date)>count(dates from report 2/date1) 

разница должна быть (нужная мне длительность) рассчитана как

today - max(JULIANDAY(`date`)) 

Буду очень признателен за вашу помощь,Это мой второй вопрос здесь.Спасибо за ваше время и понимание заранее.

1 Ответ

0 голосов
/ 17 декабря 2018

Получите максимальную дату из подзапроса и присоединитесь к ней по имени проекта, затем используйте эту дату для вычисления продолжительности

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

Я использовал свои собственные имена таблиц / столбцов, но надеюсь, что запрос имеет смыслв любом случае

...