sql >> データベース >  >> RDS >> Sqlserver

ORDER BY 別の列を使用した SQL Server 2012 の group_concat

    これがより速くなるかどうかはわかりませんが、purchasesで参加しない別のバージョンを次に示します。 STUFF() で 2 回 :

    select customer_id,
      min(purchased_at) as first_purchased_at,
      stuff ((select ',' +  p2.product 
              from
              (
                select product, customer_id,
                    ROW_NUMBER() over(partition by customer_id, product order by purchased_at) rn,
                    ROW_NUMBER() over(partition by customer_id order by purchased_at) rnk   
                from purchases
              ) p2 
              where p2.customer_id = p1.customer_id
                and p2.rn = 1
              group by p2.product, rn, rnk
              order by rnk
              for XML PATH('') ), 1,1,'') AS all_purchased_products  
    from purchases p1
    group by customer_id;
     

    デモによる SQL Fiddle を参照してください。

    結果:

    <プレ>| CUSTOMER_ID | FIRST_PURCHASED_AT | ALL_PURCHASED_PRODUCTS | --------------------------------------------------------------------------- | 1 | June, 01 2012 00:00:00+0000 | apples,pears | | 2 | June, 01 2012 00:00:00+0000 | apples | | 3 | September, 02 2012 00:00:00+0000 | pears,apples,bananas |


    1. エラー1060を解決する方法:[ビュー]->[ビューの作成]を使用して列名を複製します

    2. SQL Server HierarchyID の深さ優先のパフォーマンスに関する質問

    3. 24時間のフォーマットされた時間を10進数に変換する

    4. 複数のテーブルにわたるsum()結果を使用したMYSQL更新