MySQLのソース文についてのご相談

tokupon
tokupon Member
編集済: 5月 2023 仲間に相談

table1
-----------------------
Date,PageTitle,Pageviews
-----------------------
2020/10/1,A,1
2020/10/2,A,1
2020/10/3,A,1
2020/10/4,A,1
2020/10/5,A,1
2020/10/6,A,1
2020/10/7,A,1
2020/10/8,A,1
2020/10/9,A,1
2020/10/10,A,1
2020/10/2,B,1
2020/10/3,B,1
2020/10/4,B,1
2020/10/5,B,1
2020/10/6,B,1
-----------------------

・実現したいこと
PageTitleごとにDateの最小値から7日以内のPageviewsを合計して以下のように出力したい

-----------------------
Date(MIN),PageTitle,SUM(Pageviews)
-----------------------
2020/10/1,A,7
2020/10/2,B,5
-----------------------

これを実現するためにはどのようなSQL文を記述すれば可能でしょうか?
お分かりになる方、ご教授よろしくお願いいたします。

ベストアンサー

  • skaskakiz_IMJ
    skaskakiz_IMJ Contributor
    回答済み✓

    @tokupon さん

     

    こんな感じで実現できるかと思います。

     

    select
      a.`mindate`
      , a.`PageTitle`
      , sum(b.`Pageviews`) as `Pageviews` 
    from
      ( 
        select
          -- PageTitle毎の最小日を取得
          min(`Date`) as mindate
          , `PageTitle` 
        from
          `table1`  
        group by
          `PageTitle`
      ) a 
      left join `table1` b 
        on a.`PageTitle` = b.`PageTitle` 
        and b.`Date` < date_add(a.`mindate`, interval 7 day) 
        -- 最小日の7日以内の条件で結合
    group by
      a.`mindate`
      , a.`PageTitle`

答え

  • skaskakiz_IMJ
    skaskakiz_IMJ Contributor
    回答済み✓

    @tokupon さん

     

    こんな感じで実現できるかと思います。

     

    select
      a.`mindate`
      , a.`PageTitle`
      , sum(b.`Pageviews`) as `Pageviews` 
    from
      ( 
        select
          -- PageTitle毎の最小日を取得
          min(`Date`) as mindate
          , `PageTitle` 
        from
          `table1`  
        group by
          `PageTitle`
      ) a 
      left join `table1` b 
        on a.`PageTitle` = b.`PageTitle` 
        and b.`Date` < date_add(a.`mindate`, interval 7 day) 
        -- 最小日の7日以内の条件で結合
    group by
      a.`mindate`
      , a.`PageTitle`
  • ご回答ありがとうございます。
    こちらの内容で実現できました。
    助かります。