同一列 SQLite 中 2 个日期的 DateDiff
DateDiff of 2 dates in the same column SQLite
使用 SQLite,我 table 是这样的:
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
但无法正常工作!!!
经过一番搜索,我找到了答案。
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
使用 SQLite,我 table 是这样的:
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
但无法正常工作!!!
经过一番搜索,我找到了答案。
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