MySQL - poskládání dotazu

fuk

MySQL - poskládání dotazu
« kdy: 19. 01. 2018, 11:46:18 »
Nevim si rady s dotazem do DB

Kód: [Vybrat]
+-------------+----------------------+---------------------+----+---------+
| Name |details|         date        | id | Flag |
+-------------+----------------------+---------------------+----+---------+
| John |  TEST | 2018-01-19 10:45:13 |  1 | OK   |
| John |  TEST | 2018-01-19 10:49:49 |  2 | OK   |
| John |  TEST | 2018-01-19 10:49:51 |  3 | OK   |
| John |  TEST | 2018-01-19 11:10:16 |  4 | OK   |
| John |  TEST | 2018-01-19 11:11:40 |  5 | OK   |
| John |  TEST | 2018-01-19 11:15:56 |  6 | OK   |
| Josh |  TEST2| 2018-01-19 11:17:34 |  7 | OK   |
| Josh |  TEST2| 2018-01-19 11:18:10 |  8 | OK   |
+-------------+----------------------+---------------------+----+---------+
8 rows in set (0.00 sec)


Nad touto tabulku potrebuji udelat distinct pro "Name" a vybrat zaznam s nejnovejsim "date" pro kazdou polozku distinct. Muzu to udelat sice v primo ve skriptu, ale chtel bych to dostat rovnou z DB

« Poslední změna: 19. 01. 2018, 13:16:11 od Petr Krčmář »


SQL

Re:MYSQL - poskladani dotazu
« Odpověď #1 kdy: 19. 01. 2018, 11:56:13 »
Pokud jsem pochopil dobre tak tohle by mohlo stacit:

SELECT Name, details, MAX(date), id, flag FROM `table` GROUP BY Name;

ZAJDAN

  • *****
  • 2 091
    • Zobrazit profil
    • E-mail
Re:MYSQL - poskladani dotazu
« Odpověď #2 kdy: 19. 01. 2018, 12:00:09 »
presne tak...pouzit
MAX(date)
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

fuk

Re:MYSQL - poskladani dotazu
« Odpověď #3 kdy: 19. 01. 2018, 12:11:43 »
Pokud jsem pochopil dobre tak tohle by mohlo stacit:

SELECT Name, details, MAX(date), id, flag FROM `table` GROUP BY Name;


Vrati zaznamy pro John/Josh a nejnovejsi cas zaznamu, ale vraci neaktualni "details" :/

ZAJDAN

  • *****
  • 2 091
    • Zobrazit profil
    • E-mail
Re:MYSQL - poskladani dotazu
« Odpověď #4 kdy: 19. 01. 2018, 12:45:12 »
Vrati zaznamy pro John/Josh a nejnovejsi cas zaznamu, ale vraci neaktualni "details" :/
zkusil bych to bez GROUP BY
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


fuk

Re:MYSQL - poskladani dotazu
« Odpověď #5 kdy: 19. 01. 2018, 13:09:08 »
Vrati zaznamy pro John/Josh a nejnovejsi cas zaznamu, ale vraci neaktualni "details" :/
zkusil bych to bez GROUP BY

To zase vrati vsechny vysledky v DB

Sten

Re:MYSQL - poskladani dotazu
« Odpověď #6 kdy: 19. 01. 2018, 13:17:56 »
SELECT `Name`, `details`, `date`, `id`, `Flag` FROM `table` WHERE `Name` = "John" SORT BY `date` DESC LIMIT 1

Sten

Re:MySQL - poskládání dotazu
« Odpověď #7 kdy: 19. 01. 2018, 13:25:46 »
Jo, pro každou položku:
SELECT `Name`, `details`, `date`, `id`, `Flag`
FROM `table`
INNER JOIN (
    SELECT `Name`, MAX(`date`) AS `maxDate`
    FROM `table`
    GROUP BY `Name`
) `grouped`
ON `table`.`Name` = `grouped`.`Name` AND `table`.`date` = `grouped`.`maxDate`

pepa

Re:MySQL - poskládání dotazu
« Odpověď #8 kdy: 19. 01. 2018, 13:29:48 »
Jo, pro každou položku:
SELECT `Name`, `details`, `date`, `id`, `Flag`
FROM `table`
INNER JOIN (
    SELECT `Name`, MAX(`date`) AS `maxDate`
    FROM `table`
    GROUP BY `Name`
) `grouped`
ON `table`.`Name` = `grouped`.`Name` AND `table`.`date` = `grouped`.`maxDate`


Pripadně pokud ten sloupeček id je id záznamu tak vyuřít to id.


pepa

Re:MYSQL - poskladani dotazu
« Odpověď #9 kdy: 19. 01. 2018, 13:34:03 »
Pokud jsem pochopil dobre tak tohle by mohlo stacit:

SELECT Name, details, MAX(date), id, flag FROM `table` GROUP BY Name;

Bohužel todle fungovalo tak před 5 roky možná více a navíc to musel být mysql, máriadb ta už to také sypala jinak.
Jo jo dokud dotaz do databáze zpracovávalo jedno vlákno dalo se spolehnout na ledacos i na to co neodpovídá specifikaci.

ZAJDAN

  • *****
  • 2 091
    • Zobrazit profil
    • E-mail
Re:MYSQL - poskladani dotazu
« Odpověď #10 kdy: 19. 01. 2018, 13:57:22 »
SELECT `Name`, `details`, `date`, `id`, `Flag` FROM `table` WHERE `Name` = "John" SORT BY `date` DESC LIMIT 1

jen tak z hecu to zkousim, ale nedari se:
https://www.db-fiddle.com/f/fnCT7fvrx9yAHHDrXfxQJ1/7
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 091
    • Zobrazit profil
    • E-mail
Re:MySQL - poskládání dotazu
« Odpověď #11 kdy: 19. 01. 2018, 14:26:28 »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

mmm

Re:MySQL - poskládání dotazu
« Odpověď #12 kdy: 19. 01. 2018, 14:33:46 »
jste slepý? Sten ve druhém příspěvku uvedl opravené správné řešení.

ZAJDAN

  • *****
  • 2 091
    • Zobrazit profil
    • E-mail
Re:MySQL - poskládání dotazu
« Odpověď #13 kdy: 19. 01. 2018, 14:39:39 »
jste slepý? Sten ve druhém příspěvku uvedl opravené správné řešení.
schvalně si to na tom fiddlu zkus, zda Ti to bude fungovat...
každopádně si myslím, že není potřeba joinovat a stačilo by co jsem posilal
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

mmm

Re:MySQL - poskládání dotazu
« Odpověď #14 kdy: 19. 01. 2018, 14:41:06 »
jste slepý? Sten ve druhém příspěvku uvedl opravené správné řešení.
schvalně si to na tom fiddlu zkus, zda Ti to bude fungovat...
každopádně si myslím, že není potřeba joinovat a stačilo by co jsem posilal

omlouvám se, já jsem myslel, že jste tazatel.