webForumDet fria alternativet

Unik fält

6 svar · 284 visningar · startad av Sabotnick

SabotnickMedlem sedan feb. 200377 inlägg
#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!

Dies_IraeMedlem sedan aug. 2001145 inlägg
#2

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

SabotnickMedlem 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.

Peter SMedlem 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
SabotnickMedlem 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.

emissionMedlem 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.

LarsGMedlem 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))
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)