webForumDet fria alternativet

sql fråga

13 svar · 367 visningar · startad av mattiasnordin

mattiasnordinMedlem sedan maj 20012 062 inlägg
#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.

voigtann1Medlem sedan juni 20018 810 inlägg
#2

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

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

PaceMedlem sedan juni 20015 947 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.

LarsGMedlem sedan dec. 200012 465 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
mattiasnordinMedlem sedan maj 20012 062 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...

mattiasnordinMedlem sedan maj 20012 062 inlägg
#6

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

mattiasnordinMedlem sedan maj 20012 062 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.

mattiasnordinMedlem sedan maj 20012 062 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

mattiasnordinMedlem sedan maj 20012 062 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 :-(

LarsGMedlem sedan dec. 200012 465 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 "
mattiasnordinMedlem sedan maj 20012 062 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

LarsGMedlem sedan dec. 200012 465 inlägg
#12

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

mattiasnordinMedlem sedan maj 20012 062 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...

LarsGMedlem sedan dec. 200012 465 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
Genererad på 511 ms · cache AV · v20260730165559-full.f96bc7eb