Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] zaoytanie sortujące kolumny string, ale alfabet nie ma znaczenia
szczrzcz
post 24.06.2019, 20:29:31
Post #1





Grupa: Zarejestrowani
Postów: 137
Pomógł: 0
Dołączył: 20.04.2017
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Tomplus
post 25.06.2019, 01:47:38
Post #2





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
SmokAnalog
post 25.06.2019, 02:07:19
Post #3





Grupa: Zarejestrowani
Postów: 1 511
Pomógł: 242
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post
Tomplus
post 25.06.2019, 16:58:33
Post #4





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Faktycznie przesadziłem. sądziłem że on to grupuje, i dlatego nie sortuje mu tak jak oczekuje biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.07.2019 - 03:50