Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Grupa MySQL według kolejnych wierszy

Oto kolejna wersja, która współpracuje ze zmiennymi MySQL i nie wymaga głębokiego zagnieżdżania na 3 poziomach. Pierwsza z nich wstępnie sortuje rekordy w kolejności według identyfikatora postID i daty i przypisuje im kolejny numer na grupę za każdym razem, gdy zmienia się wartość jednego z identyfikatorów postu, typu i/lub akcji. Od tego, jest to proste grupowanie według... bez porównywania wersji rekordu T do T2 do T3... co jeśli chcesz 4 lub 5 kryteriów... czy musiałbyś zagnieździć jeszcze więcej wpisów?, czy po prostu dodać jeszcze 2 @ zmienne sql do testu porównawczego...

Twoje połączenie, które jest bardziej wydajne...

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    

Oto mój link do przykładu SQLFiddle

W przypadku tytułu możesz dostosować linię...

group_concat( odrębne PreQuery.Title ) jako tytuły,

Przynajmniej da to DISTINCT tytuły połączone… znacznie trudniejsze do uzyskania bez zagnieżdżania całego zapytania o jeden poziom więcej, mając maksymalną datę zapytania i inne elementy, aby uzyskać jeden tytuł powiązany z tą maksymalną datą dla wszystkich kryteriów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfiguracja CentOs PHP i MySql

  2. Zapytanie rankingowe grupy PHP MYSQL

  3. Hierarchia kategorii (PHP/MySQL)

  4. Wypełnić JFreechart TimeSeriesCollection z Mysql DB?

  5. Znajdowanie dokładnej wartości z ciągu oddzielonego przecinkami w PHP MySQL