【问题标题】:DateDiff of 2 dates in the same column SQLite同一列 SQLite 中 2 个日期的 DateDiff
【发布时间】:2019-08-15 04:34:30
【问题描述】:

使用 SQLite,我有这样的表:

ClockId          ProjectId           DateTime
-----------------------------------------------------------------
1                1                   1398/01/01 10:00:00
2                1                   1398/01/01 11:00:00
3                2                   1398/01/01 10:00:00
4                2                   1398/01/01 11:00:00
5                1                   1398/01/01 10:00:00
6                1                   1398/01/01 11:00:00
7                1                   1398/01/01 10:00:00
8                2                   1398/01/01 10:00:00
9                1                   1398/01/01 11:00:00
10               2                   1398/01/01 11:00:00

我需要这个输出:

ProjectId            Diff(minute)
------------------------------
1                    180
2                    120

实际上我需要两个这样的连接:

ClockId           ClockId
---------------------------
1                 2
3                 4
5                 6
7                 9
8                 10

我该怎么做?

我在 sql 而不是 SQLite 中尝试此代码:

select
    maintbl2.ProjectId,
    sum(maintbl2.diff) as sum
from (SELECT  
    ROW_NUMBER() OVER(ORDER BY mainTbl.ProjectId) AS Row#,
    mainTbl.ProjectId,
    DATEDIFF(minute, mainTbl.[DateTime], c1.[DateTime]) as diff
FROM [Clock] as c1
CROSS APPLY
        (SELECT TOP 1 * 
            FROM [Clock] as c2
            WHERE c1.ProjectId = c2.ProjectId and c1.DateTime > c2.DateTime
        ) mainTbl) maintbl2

但不能正常工作!!!

【问题讨论】:

  • 我真的很困惑。你说你需要一张输出表。美好的。然后你给出另一个你真正需要的版本。然后您使用 SQL Server 语法显示查询,但该问题被标记为 sqlite。这里完全混乱。
  • 对于get table2,我有两个加入第一个表,所以table3是加入的结果。
  • 第三张表的两列是什么?名称相同但必须引用不同的条目/概念?
  • 不,它们只是加入后第一个表的列!

标签: android sql sqlite join self-join


【解决方案1】:

经过一番搜索,我找到了答案。

select
        max(project.ProjectId) as ProjectId,
        sum(mainTbl.Diff) as Sum,
    project.Title as Title
    from Project as project 
    left join
    (
     select 
        c1.ProjectId,
        cast(round((julianday(REPLACE(c2.DateTime,'/','-')) - julianday(REPLACE(c1.DateTime,'/','-'))) * 24 * 60 ) as INT) as Diff
     from Clock c1
        left outer join Clock c2 on c1.ProjectId = c2.ProjectId and c1.ClockId <> c2.ClockId and c1.GuidId = c2.GuidId
        where (c1.DateTime < c2.DateTime or c2.DateTime is null)) as mainTbl
        on mainTbl.projectId = project.ProjectId
     group by project.ProjectId

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2017-07-16
    • 2010-09-22
    • 2020-04-21
    相关资源
    最近更新 更多