kzen.dev
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 Kaptah
Kaptah
Question

Ako môžem v jazyku SQL VYBRAŤ riadky s MAX(Hodnota stĺpca), DISTINCT podľa iného stĺpca?

Môj stôl je:

id  home  datetime     player   resource
---|-----|------------|--------|---------
1  | 10  | 04/03/2009 | john   | 399 
2  | 11  | 04/03/2009 | juliet | 244
5  | 12  | 04/03/2009 | borat  | 555
3  | 10  | 03/03/2009 | john   | 300
4  | 11  | 03/03/2009 | juliet | 200
6  | 12  | 03/03/2009 | borat  | 500
7  | 13  | 24/12/2008 | borat  | 600
8  | 13  | 01/01/2009 | borat  | 700

Potrebujem vybrať každý rozdielny home, ktorý má maximálnu hodnotu datetime.

Výsledok by bol:

id  home  datetime     player   resource 
---|-----|------------|--------|---------
1  | 10  | 04/03/2009 | john   | 399
2  | 11  | 04/03/2009 | juliet | 244
5  | 12  | 04/03/2009 | borat  | 555
8  | 13  | 01/01/2009 | borat  | 700

Vyskúšal som:

-- 1 ..by the MySQL manual: 

SELECT DISTINCT
  home,
  id,
  datetime AS dt,
  player,
  resource
FROM topten t1
WHERE datetime = (SELECT
  MAX(t2.datetime)
FROM topten t2
GROUP BY home)
GROUP BY datetime
ORDER BY datetime DESC

Nefunguje. Súbor výsledkov má 130 riadkov, hoci databáza ich obsahuje 187. Výsledok obsahuje niektoré duplikáty home.

-- 2 ..join

SELECT
  s1.id,
  s1.home,
  s1.datetime,
  s1.player,
  s1.resource
FROM topten s1
JOIN (SELECT
  id,
  MAX(datetime) AS dt
FROM topten
GROUP BY id) AS s2
  ON s1.id = s2.id
ORDER BY datetime 

Nie. Dáva všetky záznamy.

-- 3 ..something exotic: 

S rôznymi výsledkami.

724 2009-03-04T20:14:26+00:00 3
 DineshDB
DineshDB
Edited question 26 marec 2018 в 9:58
Programovanie
sql
mysql
greatest-n-per-group
max
distinct
Popular videos
Sql Server Dersleri - Ders 4 - Select Komutu - www.ozcantoy.com
Sql Server Dersleri - Ders 4 - Select Komutu - www.ozcantoy.com
pred 6 rokmi
Part 6   Transform rows into columns in sql server
Part 6 Transform rows into columns in sql server
pred 8 rokmi
SQL Query | How to find Maximum of multiple columns | Values
SQL Query | How to find Maximum of multiple columns | Values
pred 2 rokmi
SQL DISTINCT Within a SELECT - Retrieving Unique Values
SQL DISTINCT Within a SELECT - Retrieving Unique Values
pred 11 rokmi
Select Rows With Max Value By Group SQL Interview Question
Select Rows With Max Value By Group SQL Interview Question
pred 5 rokmi
SIT | How TO Use TOP,PERCENT,DISTINCT In MS SQL SERVER In Hindi (Part_9)
SIT | How TO Use TOP,PERCENT,DISTINCT In MS SQL SERVER In Hindi (Part_9)
pred 2 rokmi
SQL DISTINCT KULLANIMI
SQL DISTINCT KULLANIMI
pred 4 rokmi
Sql Server Dersleri - Ders 5 - DISTINCT Deyiminin Kullanımı  - www.ozcantoy.com
Sql Server Dersleri - Ders 5 - DISTINCT Deyiminin Kullanımı - www.ozcantoy.com
pred 6 rokmi
02 - 01 - 02 - Distinct Data Selection (Example 02) [RUS]
02 - 01 - 02 - Distinct Data Selection (Example 02) [RUS]
pred rokom
MS SQL tutorial on the use of Distinct, TOP and Order By
MS SQL tutorial on the use of Distinct, TOP and Order By
pred rokom
SQL Tutorial - 27: The DISTINCT Keyword
SQL Tutorial - 27: The DISTINCT Keyword
pred 9 rokmi
55. SELECT DISTINCT in SQL (Hindi)
55. SELECT DISTINCT in SQL (Hindi)
pred 6 rokmi
09 | DISTINCT query in SQL, why we use  DISTINCT Query in MS SQL SERVER in urdu/hindi
09 | DISTINCT query in SQL, why we use DISTINCT Query in MS SQL SERVER in urdu/hindi
pred 7 rokmi
SQL Server Sınıf Örnekler
SQL Server Sınıf Örnekler
pred 6 rokmi
SQL Ders 7 Select Komutu
SQL Ders 7 Select Komutu
pred 6 rokmi
SQL DERS4: MS-SQL VERİTABANI ÜZERİNDE SELECT, WHERE, DISTINCT KOMUTLARI KONU ÖZETİ VE ÖRNEK SORGULAR
SQL DERS4: MS-SQL VERİTABANI ÜZERİNDE SELECT, WHERE, DISTINCT KOMUTLARI KONU ÖZETİ VE ÖRNEK SORGULAR
pred 3 rokmi
« Predchádzajúci
Ďalšie »
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Michael  La Voie
Michael La Voie
4 marec 2009 в 8:22
2009-03-04T20:22:47+00:00
Viac na
Zdroj
Upraviť
#8872556

Ste tak blízko! Stačí, ak vyberiete OBOJA domova a ich maximálny čas dátumu, potom sa pripojíte späť k tabuľke topten na OBOCH poliach:

SELECT tt.*
FROM topten tt
INNER JOIN
    (SELECT home, MAX(datetime) AS MaxDateTime
    FROM topten
    GROUP BY home) groupedtt 
ON tt.home = groupedtt.home 
AND tt.datetime = groupedtt.MaxDateTime
Andreas Rejbrand
Andreas Rejbrand
Edited answer 14 február 2018 в 12:06
885
0
 Quassnoi
Quassnoi
4 marec 2009 в 8:24
2009-03-04T20:24:20+00:00
Viac na
Zdroj
Upraviť
#8872558

Toto bude fungovať aj vtedy, ak máte dva alebo viac riadkov pre každý home s rovnakými DATETIME's:

SELECT id, home, datetime, player, resource
FROM   (
       SELECT (
              SELECT  id
              FROM    topten ti
              WHERE   ti.home = t1.home
              ORDER BY
                      ti.datetime DESC
              LIMIT 1
              ) lid
       FROM   (
              SELECT  DISTINCT home
              FROM    topten
              ) t1
       ) ro, topten t2
WHERE  t2.id = ro.lid
 Quassnoi
Quassnoi
Edited answer 6 marec 2009 в 8:30
27
0
Ricardo Felgueiras
Ricardo Felgueiras
4 marec 2009 в 8:30
2009-03-04T20:30:58+00:00
Viac na
Zdroj
Upraviť
#8872559

Myslím, že to prinesie požadovaný výsledok:

SELECT   home, MAX(datetime)
FROM     my_table
GROUP BY home

ALEBO ak potrebujete aj iné stĺpce, stačí urobiť spojenie s pôvodnou tabuľkou (pozrite si odpoveď Michaela La Voie)

S pozdravom.

 sactiw
sactiw
Edited answer 26 november 2015 в 12:32
25
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Daniel Gogov
Registered pred týždňom
2
工藤 芳則
Registered pred 2 týždňami
3
Ирина Беляева
Registered pred 2 týždňami
4
Darya Arsenyeva
Registered pred 2 týždňami
5
anyta nuam-nuam (LapuSiK)
Registered pred 3 týždňami
DE
EL
ES
ET
FR
ID
IT
JA
KO
LV
NL
NO
PL
PT
RO
RU
SK
TR
ZH
© kzen.dev 2023
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora