webForumDet fria alternativet

Unik fält

Databaser & SQL

6 svar · 284 visningar · startad av Sabotnick

Medlem sedan feb. 200377 inlägg
Frågan#1

Detta är kanske en mycket dum fråga men jag kommer inte på hur jag ska göra.

Jag ska hämta ut saker från två tabeller, ordningen ska vara senaste datum först. Problemet finns i att jag vill ha unikt värde på en av fälten.

Exempel hur jag får nu

ID  ID2 DATUM  övrigt
14  1   070210 ------
15  1   070209 ------
17  2   070209 ------

Men vill ha

ID  ID2 DATUM  övrigt
14  1   070210 ------
17  2   070209 ------
19  3   070209 ------
SELECT
	tbl1.ID, tbl1.Datum, tbl1.övrigt
	tbl2.ID2, tbl2.övrigt
FROM tbl1
	RIGHT JOIN tbl2 ON tbl2.j_ID = tbl1.j_ID
ORDER BY tbl1.Datum DESC
LIMIT 0, 3

Jag vill att ID2-värden som jag får ut ska vara unika. Hjälp mig att lösa problemet.

Tack på förhand!

Medlem sedan aug. 2001145 inlägg
#2

group by tb2.ID2 innan order by kanske gör susen

Medlem sedan feb. 200377 inlägg
#3

Problemet uppstår med datumordningen... Jag får ut gamla rader och inte de senaste. Det är helt skum ordning när jag lägger till GROUP BY tb2.ID2.

Medlem sedan dec. 20025 483 inlägg
#4

Nu nämner du ej vilken version av DBMS som används, men testa:

SELECT
	tbl1.ID, tbl1.Datum, tbl1.övrigt
	tbl2.ID2, tbl2.övrigt
FROM tbl1
	RIGHT JOIN tbl2 t2 ON tbl2.j_ID = tbl1.j_ID
GROUP BY
	tbl1.ID, tbl1.Datum, tbl1.övrigt
	tbl2.ID2, tbl2.övrigt
HAVING
	tbl1.Datum
	= ( SELECT max(ti1.datum)
	      FROM tbl1 ti1
	    RIGHT
              JOIN tbl2 ti2
                ON ti2.j_ID = ti1.j_ID
             WHERE ti2.ID2 = t2.ID2 )
ORDER BY tbl1.Datum DESC
LIMIT 0, 3
Medlem sedan feb. 200377 inlägg
#5

Jag provade frågan men inreselect ser inte ut att fungera i MySQL 3.23.46 som webbhotellet kör med.

Medlem sedan dec. 19996 721 inlägg
#6

Oj! Det var en gammal MySQL! Det är helt riktigt att det inte fungerar i en så gammal version.

Medlem sedan dec. 200012 464 inlägg
#7

Med subselect

select <kolumnerAvIntresse>
   from t1 q
  where dateColumn in
  (select max(dateColumn)
      from t1
    where t1.id = q.id)

utan subselect

select q.<kolumnerAvIntresse>
   from t1 q join t1 on q.id = t1.id
 group by q.<kolumnerAvIntresse>
  having q.dateColumn = max(t1.dateColumn))
261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)