0

最初の質問、誰かがここで助けてくれることを願っています。私はこれを行う方法を少し追跡しようとしていて、援助を求める時が来たと考えました。私は私のSQLクエリに非常に慣れていないことに注意してください、そして私のコードはおそらくそれが得るのと同じくらいエレガントではありません!

同じ構成の2つのデータベースを使用しています。各データベースは地域データを表しますが、すべてのテーブルと列はそれらの間で同一です。本質的に、私は特定の個人によって実行された活動の毎日のカウントを取得することを探しています。また、収集する必要のあるデータは複数のテーブルにあるので、ここで表記します。2つのデータベースの場合はD_USAとD_CAN、結合している2つのテーブルの場合はT1とT2です。これが私の既存のコードと私が得る出力です:

SELECT 
  "USA" AS REGION, 
  LEFT(FROM_UNIXTIME(D_USA.T1.date),10) as DATE,
  D_USA.T1.owner AS OWNER, COUNT(DISTINCT D_USA.T1.id) AS GROUPS, 
  COUNT(DISTINCT D_USA.T2.id) AS UNITS
FROM
  D_USA.T1
  JOIN D_USA.T2 ON D_USA.T1.id = D_USA.T2.parent_id
WHERE
  D_USA.T1.complete='Y'
  AND D_USA.T1.owner = 'XYZ' 
  AND D_USA.T2.status = 'P' 
  AND LEFT(FROM_UNIXTIME(D_USA.T1.date),10) >= '2012-01-01'
GROUP BY DATE
UNION ALL
SELECT 
  "CAN" AS REGION, 
  LEFT(FROM_UNIXTIME(D_CAN.T1.date),10) as DATE,
  D_CAN.T1.owner AS OWNER, 
  COUNT(DISTINCT D_CAN.T1.id) AS GROUPS, 
  COUNT(DISTINCT D_CAN.T2.id) AS UNITS
FROM
  D_CAN.T1
  JOIN D_CAN.T2 ON D_CAN.T1.id = D_CAN.T2.parent_id
WHERE 
  D_CAN.T1.complete='Y'
  AND D_CAN.T1.owner = 'XYZ' 
  AND D_CAN.T2.status = 'P' 
  AND LEFT(FROM_UNIXTIME(D_CAN.T1.date),10) >= '2012-01-01'
GROUP BY DATE 
ORDER BY DATE ASC;

現在の出力:

REGION|DATE|OWNER|GROUPS|UNITS
USA|2012-01-01|XYZ|10|100
CAN|2012-01-01|XYZ|5|100
USA|2012-01-02|XYZ|10|75
USA|2012-01-03|XYZ|5|50
CAN|2012-01-03|XYZ|10|50
CAN|2012-01-04|XYZ|10|100

必要な出力(上記に基づく)

DATE|OWNER|GROUPS|UNITS
2012-01-01|XYZ|15|200
2012-01-02|XYZ|10|75
2012-01-03|XYZ|15|100
2012-01-04|XYZ|10|100

どんな援助も大歓迎です!

4

1 に答える 1

0

選択したものを次のようにラップするだけです

Date、Owner、Groups、Sum(Units)をUnits From(ここにクエリを挿入)として選択しますsomedummyName Group By Date、Owner、Groups

于 2012-05-17T12:43:19.110 に答える