Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [SQL] zaoytanie sortujące kolumny string, ale alfabet nie ma znaczenia

Napisany przez: szczrzcz 24.06.2019, 20:29:31

Muszę sortować dla każdego person_id, gdzie priorytety porządkowe to:

1. actual: 1 > 0
2. type: Reg > Zee = Con
3. date_start: DESC

czyli z tabeli danych:

Kod
+----+-----------+------+------------+------------+--------+
| id | person_id | type | date_start | date_end   | actual |
+----+-----------+------+------------+------------+--------+
| 1  | 1         | Reg  | 01-01-2018 | 31-01-2018 | 0      |
+----+-----------+------+------------+------------+--------+
| 2  | 1         | Con  | 01-02-2019 | 01-05-2019 | 0      |
+----+-----------+------+------------+------------+--------+
| 3  | 2         | Reg  | 01-01-2018 | 31-05-2018 | 0      |
+----+-----------+------+------------+------------+--------+
| 4  | 2         | Reg  | 01-05-2018 | 31-07-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 5  | 2         | Con  | 01-06-2018 | 31-04-2020 | 1      |
+----+-----------+------+------------+------------+--------+
| 6  | 2         | Zee  | 31-05-2019 | 31-08-2019 | 1      |
+----+-----------+------+------------+------------+--------+


zapytanie dla person_id = 1 miałoby posortować tak:
Kod
    +----+-----------+------+------------+------------+--------+
    | id | person_id | type | date_start | date_end   | actual |
    +----+-----------+------+------------+------------+--------+
    | 1  | 1         | Reg  | 01-01-2018 | 31-01-2018 | 0      |
    +----+-----------+------+------------+------------+--------+
    | 2  | 1         | Con  | 01-02-2019 | 01-05-2019 | 0      |
    +----+-----------+------+------------+------------+--------+


a dla person_id = 2 miałoby posortować tak:
Kod
+----+-----------+------+------------+------------+--------+
| id | person_id | type | date_start | date_end   | actual |
+----+-----------+------+------------+------------+--------+
| 4  | 2         | Reg  | 01-05-2018 | 31-07-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 6  | 2         | Zee  | 31-05-2019 | 31-08-2019 | 1      |
+----+-----------+------+------------+------------+--------+
| 5  | 2         | Con  | 01-06-2018 | 31-04-2020 | 1      |
+----+-----------+------+------------+------------+--------+
| 3  | 2         | Reg  | 01-01-2018 | 31-05-2018 | 0      |
+----+-----------+------+------------+------------+--------+


Ponadto, ale jest to dodatkowe pytanie, muszę pobrać najstarszą datę początkową z zapytania, ale TYLKO, jeśli pomiędzy poszczególnymi wierszami zachowano ciągłość daty

Napisany przez: Tomplus 25.06.2019, 01:47:38

Coś takiego należałoby zrobić... czyli łączysz dwie te same tabele, tylko jedną z grupowaną, drugą normalną...

zapytanie z palca, więc może nie działać, chodzi o logikę

  1. SELECT a.*
  2. FROM DATA a, (
  3. SELECT MAX(date_start) AS date_start, type, person_id, id
  4. FROM DATA
  5. WHERE a.list_name = 1
  6. GROUP BY person_id
  7. ) AS b
  8. WHERE a.list_name = b.person_id AND a.list_name = 1
  9. ORDER BY actual DESC;

Napisany przez: SmokAnalog 25.06.2019, 02:07:19

@Tomplus co Ty tworzysz?

Jeśli chodzi o sortowanie, to załatwisz to łatwo:

  1. ORDER BY `actual` DESC,
  2. `type` = 'Reg' DESC,
  3. `date_start` DESC


Jeśli chodzi o daty, to musisz doprecyzować - co to w Twoim przypadku znaczy ciągłość? I co chcesz zwrócić, jeśli ciągłości nie ma? Najprawdopodobniej wygodniej będzie to załatwić skryptem, chyba że koniecznie musi być zapytanie.

Napisany przez: Tomplus 25.06.2019, 16:58:33

Faktycznie przesadziłem. sądziłem że on to grupuje, i dlatego nie sortuje mu tak jak oczekuje biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)