根据多个条件计算SQLite中两个日期之间的差异

时间:2018-12-17 10:26:15

标签: sql sqlite datediff

在计算SQLite中两个日期之间的差异时,请考虑以下问题:

我有一张包含以下信息的表,其中有2种不同的情况。该表中的每个项目代表2种可能情况中的1种。

 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行。项目名称和日期列来自表1,项目名称,日期1,StageDuration列来自表2。如果我在table1中有1行以上,在表2中有1行,则在连接表中会获得2行(像这样)例如)。

当前,我使用以下SQLite代码获取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 :(得分:0)

从子查询中获取最大日期,然后将其与项目名称相结合,然后使用该日期来计算工期

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

我使用了自己的表/列名,但我希望查询仍然有意义