-1

我正在尝试获取某个项目在某个日期被修改或创建的次数。

该表如下所示:

sqlite> select date_modified, date_created from table
1374084096000000000|1334159913000000000
1338386443000000000|1334159913000000000
1366221700000000000|1334159913000000000
1345654859000000000|1334159913000000000

自 EPOCH 以来,这两个字段都以纳秒为单位。我将其转换为:

sqlite> select date((DATE_CREATED/1000000000), 'unixepoch', 'localtime'), date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime') from table;
2012-04-11|2013-07-17
2012-04-11|2012-05-30
2012-04-11|2013-04-17
2012-04-11|2012-08-22

我目前运行两个查询,如下面的一个(一个使用 date_modified,一个使用 date_created)。

sqlite> select
   ...>  date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime') as "Date",
   ...>  count(date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime')) as "Modified Count"
   ...> from 
   ...>  table
   ...> group by 
   ...>  Date
   ...> limit 10;
2012-04-05|32
2012-04-10|271
2012-04-11|903
2012-04-12|146

如何同时计算两者并显示每个操作在某个日期发生的次数?请记住,有些日子没有创建,有些日子没有修改。我正在寻找这样的东西:

Date|Create_Count|Mod_Count
2012-04-11|0|124
2012-04-12|123|547
2012-04-18|852|674
2012-04-20|741|0
4

1 回答 1

0

试试这个

SELECT d.Dt, sum(CREATED_CNT) "Created", sum(MODIFIED_CNT) "Modified"
FROM
(
  select date((DATE_CREATED/1000000000), 'unixepoch', 'localtime') as "Dt",
  count(*) CREATED_CNT, 0 As MODIFIED_CNT 
  from t 
  group by dt

  UNION ALL

  select date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime') as "Dt2",
  0 As CREATED_CNT, count(*) As MODIFIED_CNT 
  from t 
  group by dt2
) d
group by dt

或者

SELECT d.Dt, coalesce(CREATED_CNT,0) "Created", coalesce(MODIFIED_CNT,0) "Modified"
FROM
(
 select distinct date((DATE_CREATED/1000000000), 'unixepoch', 'localtime') as "Dt" 
   from t
 UNION 
 select distinct date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime') as "Dt"
   from t
) d
left outer join 
(
  select date((DATE_CREATED/1000000000), 'unixepoch', 'localtime') as "Dt",
   count(*) CREATED_CNT
   from t
  group by dt
) c on d.dt = c.dt
left outer join 
(
  select date((DATE_MODIFIED/1000000000), 'unixepoch', 'localtime') as "Dt",
   count(*) MODIFIED_CNT
   from t
  group by dt
) m  on d.dt = m.dt

SQL 演示

于 2013-07-30T02:13:44.847 回答