【问题标题】:Calculation of the difference between two Dates in SQLite based on multiple conditions基于多个条件计算SQLite中两个日期之间的差异
【发布时间】:2018-12-17 10:26:14
【问题描述】:

请考虑以下关于 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。如果我在表 1 中有超过 1 行,在表 2 中有 1 行,我会在连接表中得到 2 行(就像在这个示例)。

目前我使用以下 SQLite 代码来获取 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`)) 

非常感谢您的帮助。这是我的第二个问题。提前感谢您的时间和理解。

【问题讨论】:

    标签: sql sqlite datediff


    【解决方案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
    

    我使用了自己的表/列名,但无论如何我希望查询有意义

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2021-11-25
      • 2011-08-01
      • 2011-05-16
      相关资源
      最近更新 更多