webForumDet fria alternativet
Logga in / Bli medlem

sql fråga

Databaser & SQL

13 svar · 367 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Trådstart#1

Vill ha ut top 10 från accessdatabas. Vill visa de 10 senast uppdaterade men högst en per kategori. Alltså om vi har en kategori som heter katter (med massor med rader) så vill jag bara ha ut en av dessa rader och sedan 9 andra rader från övriga kategorier sorterat på tiden...

Databasen ser ut så här:
id | category | last_updated_time | last_updated_date | etc...

Det jag inte förstår är hur man exkluderar så att vi bara får en träff per kategori.

Medlem sedan juni 20019 519 inlägg
#2

SQL = "Select top10(*) from tabell where..."

red. förlåt uppfattade frågan lite väll snabbt :(

Medlem sedan juni 20019 024 inlägg
#3
SELECT TOP 10 fälten FROM tabellen
GROUP BY category
ORDER BY last_updated_date DESC

Lägg ihop last_updated_time och last_updated_date till ett fält, finns ingen anledning att ha dem separerade.

Medlem sedan dec. 200012 464 inlägg
#4
select top 10 * from
(select * from categories c
  where dateColumn in 
      (select max(dateColumn) from categories
    where categoryid = c.categoryid  ))
order by dateColumn desc
Medlem sedan maj 20012 080 inlägg
#5

en vanlig TOP 10 fråga vet jag hur man gör men jag vill att den ska ta hänsyn till att det enbart får finnas en träff per kategori även om en kategori har fler nya datum än en annan...

Medlem sedan maj 20012 080 inlägg
#6

Ojjj vad ni svarade snabbt... ska prova :h

Medlem sedan maj 20012 080 inlägg
#7

Jag får det inte att funger men det beror nog på att jag är så trött så att jag inte längre ser skärmen.,... Ska prova mer i morgon.

Medlem sedan maj 20012 080 inlägg
#8

Hej Lars (och alla andra)...

Har labbat lite med koden jag fick av dig och har nästan fått det att fungera...

<% sql = "select top 10 * from "
sql = sql & "(select * from T_picture_stats c"
sql = sql & " where last_updated_date in"
sql = sql & "(select max(last_updated_date) from T_picture_stats"
sql = sql & " where picture_kategori = c.picture_kategori  ))"
sql = sql & " order by last_updated_date desc"

Så här ser numer databasen ut...
ID | picture_kategori | picture | last_updated_date | last_updated_time

Problemet består av att jag får ut 160 träffar istället för 10. Jag får även dubletter, dvs samma "picture_kategori" visas flera gånger.

Tacksam för hjälp.
Mvh
Mattias

Medlem sedan maj 20012 080 inlägg
#9

<% sql = "select top 10 * from "
sql = sql & "(select * from T_picture_stats c"
sql = sql & " where last_updated_date in"
sql = sql & "(select max(last_updated_date) from T_picture_stats"
sql = sql & " where picture_kategori = c.picture_kategori ))"
sql = sql & " order by last_updated_date desc, picture_kategori DESC"
%>

Fungerar lite bättre. Returnerar nu rätt antal, men fortfarande fel med kategorierna. Det verkar även ta ett bra tag för sidan har blivit jätteseg :-(

Medlem sedan dec. 200012 464 inlägg
#10

Varför har du delat upp last_updated_date och last_updated_time i två kolumner?

sql = "select top 10 * from " & _
 " (select * from T_picture_stats c where id in " & _
 " (select top 1 id from T_picture_stats " & _
 " where picture_kategori = c.picture_kategori " & _
 " order by last_updated_date desc, last_updated_time desc,id))" & _
 " order by last_updated_date desc, last_updated_time desc,id "
Medlem sedan maj 20012 080 inlägg
#11

jag har inte någon anledning... ha ha .... hmmm... det känndes bra för tillfället att använda två columner... sorry!

Jag böjer mig på mina bara knän. Din fråga är perfekt. Resultatet är som jag vill ha det.

Något strular dock för det tar ca tre sekunder innan sidan kommer upp. Jag har 91 kategorier och 1000 bilder fördelat i dessa. Är det en mer krävande fråga än de vanliga select a b c frågorna jag använder på samma sida?

Tack för hjälpen ! :e

Medlem sedan dec. 200012 464 inlägg
#12

Hur är tabellen indexerad? Ett sammansatt index på
last_updated_date och last_updated_time kanske hjälper upp.

Medlem sedan maj 20012 080 inlägg
#13

Det låter kul...

Hur gör man ett sammansatt index i access? Jag har aldrig gjort det förut.

Igentligen behöver jag nog inte ha både datum och tid i olika columner, kanske är bättre att ändra det...

Medlem sedan dec. 200012 464 inlägg
#14
create index longTallSally on T_picture_stats(last_updated_date desc, 
last_updated_time desc,id)

Jag tog med id också. Nu vet jag inte om Access tillåter att man anger sorteringsordning i index. Om inte, så får du ta bort desc

Du kan ju testa och lägga ett på category_id också. Om det inte hjälper så går det att ta bort index med

drop index longTallSally
262 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)