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

GRUPUJ WG ZAMÓWIENIA

Tak więc z komentarzy i dodania SqlFiddle wygląda na to, że chcesz utworzyć podzielony na partycje numer wiersza z priorytetem US na platformę, a następnie wybrać pierwszy rekord. Jednym ze sposobów na partycjonowanie numerów wierszy w mysql jest użycie zmiennych. Oto przykład:

SELECT
  territory_id
  ,platform_type_id
  ,store_url
FROM
( SELECT
    *
    ,@PlatFormRowNum:= IF(@prevplatform = platform_type_id, @PlatFormRowNum + 1, 1) as PlatformRowNum
    ,@prevplatform:= platform_type_id
  FROM
    main_itemmaster m
    CROSS JOIN (SELECT @prevplatform:='',@PlatFormRowNum=0) var
  ORDER BY
    platform_type_id
    ,CASE WHEN territory_id = 'US' THEN 0 ELSE 1 END
    ,territory_id
) t
WHERE
  t.PlatformRowNum = 1
ORDER BY
  t.platform_type_id

SQL Fiddle:http://sqlfiddle.com/#!9/81c3b6/12

Zasadniczo dzieli to numer rzędu według platformy, porządkuje US przed jakimkolwiek innym terytorium, a następnie wybiera pierwszy rząd dla każdej platformy. Jedynym pytaniem/sztuczką jest to, jak wybrać, który zwracać, gdy USA nie są dostępne dla platformy, po prostu rosnącej kolejności alfabetycznej terytorium_id?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można zaktualizować MySQL w MAMP do MySQL 5.7?

  2. Funkcja MySQL FLOOR() — zaokrąglanie w dół do najbliższej liczby całkowitej

  3. sqlalchemy func.group_concat i losowa kolejność danych

  4. SQL - Wybierz 'n' największych elementów w grupie

  5. SQLite INSERT - PRZY AKTUALIZACJI ZDUPLIKOWANEGO KLUCZA (UPSERT)