webForumDet fria alternativet

Plocka ut de 3 senaste datumen från två tabeller?

Databaser & SQL

12 svar · 275 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

Nu får ni något att bita i.
Jag har två tabeller (t_news & t_text). I var och en av dessa tabeller finns det X antal poster. Varje post har ett fält som innehåller en tidpunkt (yyyy-mm-dd hh:mm:ss) samt ett fält som innehåller ett IDnr. Jag skulle vilja plocka ut IDnr på de poster som har senast tidpunkt (vill inte ha några dubbletter av IDnr). Svårt att förklara vad jag menar så jag visar med ett exempel.

Databasen består av..
t_news:
id, tidpunkt:
12, 2002-05-13 15:14:16
4, 2002-12-14 12:05:49
15, 2003-02-05 21:45:02
12, 2002-12-24 14:55:04
osv...

t_text:
id, tidpunkt:
14, 2002-07-30 02:15:45
7, 2002-10-15 08:09:12
12, 2003-01-26 23:57:19
osv...

Ur denna data ska följande plockas ut:
15, 2003-02-05 21:45:02
12, 2003-01-26 23:57:19
4, 2002-12-14 12:05:49

dvs. De data där datumen är som högst men utan dubletter av IDnr.

Medlem sedan dec. 200012 464 inlägg
#2

Vilken databashanterare?

Sql Server/access

select top 3 * from 
(select  id,tidpunkt from t_news
  union all select id,tidpunkt from t_text) s
order by tidpunkt desc, id
Medlem sedan mars 20025 907 inlägg
#3

Nästan så. Med den koden så får man tyvärr dubbletter. Jag vill alltså inte att samma id ska komma flera gånger. Resultatet ska bli 3st olika IDnr.
Jag provade att sätta in distinct lite här och där, men det hjälpte inte. Hur göra??

(ruggigt vass kod annars!)

Databasen är en access-databas!

Medlem sedan mars 20025 907 inlägg
#4

Har löst det hela provisoriskt mha. lite for-loopar och if-satser. Men kommer ni på någon lösning så man kan klara av det redan i SQL-strängen så vore det ju ganska bra!

Medlem sedan dec. 200012 464 inlägg
#5

I så fall är det bara att ta bort all från union

select top 3 * from 
(select  id,tidpunkt from t_news
  union select id,tidpunkt from t_text) s
order by tidpunkt desc, id
Medlem sedan mars 20025 907 inlägg
#6

Tyvärr inte. Resultatet blir fortfarande att dubbletter förekommer. Sen undrar jag vad "s" står för i din kod, det verkar fungera lika bra utan det!?

Medlem sedan dec. 200012 464 inlägg
#7

Jaså, union innebär att alla duplikat skall tas bort så det verkar märkligt. Om det är som du säger så är det fel i Access.

S är bara ett (onödigt) korrelationsnamn som krävs av vissa DBMS.

Medlem sedan mars 20025 907 inlägg
#8

Jahaja. Då får man väl köra med mina fina if-satser istället då. Men du ska ha stort tack för hjälpen!

Medlem sedan mars 20025 907 inlägg
#9

Väcker den här tråden igen. Exakt samma fråga som i första inlägget, fast den här gången med mySQL. Hur göra?

Medlem sedan dec. 200012 464 inlägg
#10

Om du inte har version 4.1 så är det enklaste att ställa två frågor med limit 3 och sedan hantera det i klienten.

Alternativet är att använda en temp-tabell och fylla den.

Medlem sedan mars 20025 907 inlägg
#11

Jahopp. Då får det bli dubbla frågor då. Tack för hjälpen!

Följdfråga: Är det några fler skillnader i ver 4.1 i jämförelse med ver. 3.23.54. Tänkte fråga webhotellet om de har lust att uppdatera till den versionen. Det kostar ju inget.

Medlem sedan dec. 200012 464 inlägg
#12

I och med att version 4 ännu är i en testfas så kommer inget webhotell att uppgradera innan en officiell version släpps.

Medlem sedan mars 20025 907 inlägg
#13

Jadå var ju det problemet ur världen. Stort tack!!

280 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)