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

連続する行によるMySQLグループ

    これは、MySQL変数で動作し、3レベルのネストを必要としない別のバージョンです。最初のレコードは、postIDとDateの順にレコードを事前に並べ替え、Post ID、タイプ、アクションのいずれかで値が変更されるたびに、グループごとに連番を割り当てます。それから、それは単純なグループです...レコードバージョンTとT2とT3を比較しません... 4つまたは5つの基準が必要な場合はどうなりますか...さらに多くのエントリをネストする必要がありますか?比較テストへのSQL変数...

    より効率的なあなたの呼び出し...

    select
          PreQuery.postID,
          PreQuery.PostType,
          PreQuery.Target,
          PreQuery.Action,
          PreQuery.Title,
          min( PreQuery.Date ) as FirstActionDate,
          max( PreQuery.Date ) as LastActionDate,
          count(*) as ActionEntries,
          group_concat( PreQuery.content ) as Content
       from
          ( select
                  t.*,
                  @lastSeq := if( t.action = @lastAction
                              AND t.postID = @lastPostID
                              AND t.postType = @lastPostType, @lastSeq, @lastSeq +1 ) as ActionSeq,
                  @lastAction := t.action,
                  @lastPostID := t.postID,
                  @lastPostType := t.PostType
               from
                  t,
                  ( select @lastAction := ' ',
                           @lastPostID := 0,
                           @lastPostType := ' ',
                           @lastSeq := 0 ) sqlVars
               order by
                  t.postid,
                  t.date ) PreQuery
       group by
          PreQuery.postID,
          PreQuery.ActionSeq,
          PreQuery.PostType,
          PreQuery.Action    
    

    これが私のSQLFiddleサンプルへのリンクです

    タイトルについては、行を調整することをお勧めします...

    group_concat(distinct PreQuery.Title)as Titles、

    少なくともこれにより、DISTINCTタイトルが連結されます...すべての基準ごとに最大クエリ日付と他の要素を使用してその最大日付に関連付けられた1つのタイトルを取得することにより、このクエリ全体をもう1つのレベルにネストせずに、許可するのははるかに困難になります。

    >

    1. MySQLサブクエリ-LEFTJOINの最初のレコードのみを検索します

    2. phpmyadminを使用してストアドプロシージャを作成する方法と、phpを介して使用する方法は?

    3. 2016年プラハPostgreSQL開発者デー

    4. MySQL Errno 150