-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

現在、以下のような 2 つのクエリを実行しています (1 つは date_modified を使用し、もう 1 つは 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 に答える