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ę
SELECT a.*
FROM DATA a, (
SELECT MAX(date_start) AS date_start, type, person_id, id
FROM DATA
WHERE a.list_name = 1
GROUP BY person_id
) AS b
WHERE a.list_name = b.person_id AND a.list_name = 1
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:
ORDER BY `actual` DESC,
`type` = 'Reg' DESC,
`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