0

ユーザーアクティビティの表があります。HWA、アクティビティの日付、およびgroupIDがあります。日付範囲に基づいて、ユーザーがアクティビティを行った四半期を取得します。

日付範囲:2011-08-01-2012-07-31

Q1 - Aug-Oct
Q2 - Nov-Jan
Q3 - Feb-Apr
Q4 - May-Jul

一部のHWAは、他のHWAに置き換わるものです。これらの場合、それらはリンクされていることを示すために同じgroupIDを持っています。このような場合、重複する四半期をキャンセルする必要があります。明確にするために、2つのHWAが第2四半期に使用され、それらが同じgroupIDを持っている場合、そのうちの1つについて第2四半期のみをカウントする必要があります(これは重要ではありません)。以下は、私が得た出力で現在使用しているクエリです。

SELECT act.HWA, count(act.HWA), m.Status, m.GroupID
    FROM (
        SELECT 
          a.HWA, a.Date,
          CASE 
            WHEN MONTH(a.Date) BETWEEN 8 AND 10 THEN 'Q1'
            WHEN (MONTH(a.Date) BETWEEN 11 AND 12 OR MONTH(a.Date) = 1) THEN 'Q2'
            WHEN MONTH(a.Date) BETWEEN 2 AND 4 THEN 'Q3'
            WHEN MONTH(a.Date) BETWEEN 5 AND 7 THEN 'Q4'
          END AS quarter,
          CASE
            WHEN MONTH(a.Date) <= 7 THEN YEAR(a.Date) - 1 
            ELSE EXTRACT(YEAR_MONTH from a.Date)
          END AS quarteryear,
          COUNT(*) AS num_activites
        FROM activity a
        WHERE a.InstitutionNumber = '000000000075'  
          AND (a.HWA = '001372EADBC4' 
            OR a.HWA = '180373E241DB' 
            OR a.HWA = '180373E23DE7')
          AND (a.Date between '2011-08-01' and '2012-07-31')
        GROUP BY
          quarter,
          a.HWA
    ) act, machine m
    where act.HWA = m.HWA
    group by act.HWA

これはこれを返します:

HWA             quarters      status      groupid

001372EADBC4        3        deleted        59970
180373E23DE7        2         online        59970
180373E241DB        1        deleted        59970

期待される結果は次のとおりです。

HWA四半期ステータスグループID

001372EADBC4        2        deleted        59970
180373E23DE7        2         online        59970
180373E241DB        0        deleted        59970

上記のクエリを少し変更して作成した各HWAの四半期のリストを次に示します。3つのHWAすべてに第3四半期のシェアがあり、そのうちの1つだけに第3四半期を持たせたいことがわかります。

001372EADBC4    1   deleted 59970
001372EADBC4    2   deleted 59970
001372EADBC4    3   deleted 59970
180373E23DE7    3   online  59970
180373E241DB    3   deleted 59970
180373E23DE7    4   online  59970
4

1 に答える 1

0

だから私はほとんどの部分でグループ化を変えるだけでそれを理解しました:

SELECT act.HWA, count(act.HWA), m.Status, m.GroupID
  FROM (
   SELECT 
      a.HWA, a.Date,
      CASE
        WHEN MONTH(a.Date) BETWEEN 8 AND 10 THEN '1'
        WHEN (MONTH(a.Date) BETWEEN 11 AND 12 OR MONTH(a.Date) = 1) THEN '2'
        WHEN MONTH(a.Date) BETWEEN 2 AND 4 THEN '3'
        WHEN MONTH(a.Date) BETWEEN 5 AND 7 THEN '4'
       END AS quarter,
       CASE
          WHEN MONTH(a.Date) <= 7 THEN YEAR(a.Date) - 1 
          ELSE EXTRACT(YEAR_MONTH from a.Date)
        END AS quarteryear,
        COUNT(*) AS num_activites
      FROM activity a, machine m
      WHERE
        a.InstitutionNumber = '000000000075'
        AND m.InstitutionID = 14
        AND (a.HWA = '001372EADBC4' 
            OR a.HWA = '180373E241DB' 
            OR a.HWA = '180373E23DE7')
        AND a.HWA = m.HWA
        AND (a.Date between '2011-08-01' and '2012-07-31')
        AND a.EngineRequests > 0
        AND a.FilesAnalyzed > 0
      GROUP BY
        quarter,
        m.GroupID
  ) act, machine m
WHERE act.HWA = m.HWA
AND m.InstitutionID = 14
GROUP BY act.HWA

SELECTアクトに次のように追加しました。

AND m.InstitutionID = 14 Group By m.GroupID

そして私はSELECT行為から以下を削除しました:

Group By a.HWA

于 2012-08-03T05:12:19.030 に答える