webForumDet fria alternativet
Logga in / Bli medlem

distinct

Databaser & SQL

20 svar · 392 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Trådstart#1

Jag håller på lite med statistik och har en SQL sträng som ser ut som följande:

SELECT capacity.flight, capacity.date, stats.kgs, stats.awb FROM capacity inner join stats on capacity.flight = stats.flight and capacity.date = stats.date Where [capacity.date] = '01AUG' AND capacity.route ='GLA LHR' order by capacity.date, capacity.Flight, stats.awb

Nu är det så att det finns flera som har samma stats.awb, men jag vill bara lista en av varje....

Hur skall jag göra det?
distinct????

Medlem sedan dec. 200012 464 inlägg
#2

Ja distinct tar bort duplikat så det borde vara lämpligt.

Har du testat och upplevt något traumatiskt problem med detta?

Medlem sedan juli 2001514 inlägg
#3

Det är så att det int fungerar när jag lägger till distinct.

Det enda som skall vara distinct är nämligen stats.awb.
annars så kunde man ju bara skriva
select destinct capacity.flight...... i början.

Men det är nämligen så att på varje route så går det ett antal flighter och på varje flight så finns det ett antal awb'er.
Ibland kan en awb förekomma flera gånger per flight då den innehåller en statuskod som talar om vad som hänt med den (ointressant då det är vikten jag är ute efter, och som är samma obroende på statuskod)

capacity.flight
capacity.date
stats.kgs
stats.awb

Medlem sedan dec. 200012 464 inlägg
#4

Vilket awb vill du ha då?

SELECT capacity.flight, capacity.date, stats.kgs, min(stats.awb )
FROM capacity inner join stats on capacity.flight = stats.flight and capacity.date = stats.date 
Where [capacity.date] = '01AUG' 
AND capacity.route ='GLA LHR' 
group by capacity.flight, capacity.date, stats.kgs,
order by capacity.date, capacity.Flight, 4
Medlem sedan juli 2001514 inlägg
#5

Det spelar ingen roll vilken awb jag tar, bara den inte förekommer fler än en gång.

Däremot så får jag ett fel på sql frågan som du skrev.

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'date' as part of an aggregate function.

Förresten i SQL frågan, vad menas med 4:an i slutet?

Medlem sedan dec. 200012 464 inlägg
#6

4:an betyder att man använder fjärde uttrycket i select-listan för att sortera.

Grundorsaken till felet är nog att du har en kolumn som heter date.

Det kanske går om du anger lite klamrar, jag vet inte exakt hur access hanterar det. Helst borde du byta namn på den kolumnen

SELECT capacity.flight, [capacity.date], stats.kgs, min(stats.awb )
FROM capacity inner join stats on capacity.flight = stats.flight and capacity.date = stats.date 
Where [capacity.date] = '01AUG' 
AND capacity.route ='GLA LHR' 
group by capacity.flight, [capacity.date], stats.kgs,
order by capacity.date, capacity.Flight, 4
Medlem sedan juli 2001514 inlägg
#7

Fungerade utmärkt (efter att jag tog bort ett komma innan group by) :e :e :e

Jag bugar och bockar.
:birp

Medlem sedan juli 2001514 inlägg
#8

Jag var nog lite för snabb där att säga att det fungerar perfa......det gör det inte.....

när jag kör med den sista sql satsen som jag fick av dig LarsG så visar den inte lika många dubletter, men en del visas.

När jag kör med din sql fråga:

BD 0001 09JUL 643  23611457014
BD 0001 09JUL 801  23611457294
BD 0001 09JUL 614 7571801144
BD 0001 09JUL 567 7571801144
BD 0001 09JUL 47   7571801144
BD 0001 09JUL 243 7571801251
BD 0001 09JUL 0     7571801251
BD 0005 09JUL 10   23611341282
BD 0005 09JUL 0     23611341282
BD 0007 09JUL 31   61845741850
BD 0007 09JUL 0     61845741850

(Observera att i kolumn tre som är vikten så är dom inte lika dana, men det kommer den att vara i databasen)

Men om jag kör med den som jag hade först så visas det ännu mera dubletter.

Medlem sedan dec. 200012 464 inlägg
#9

Tänker du på dessa två poster

BD 0001 09JUL 614 7571801144
BD 0001 09JUL 567 7571801144

?

Vilket av 614/567 vill du ha då?

Medlem sedan juli 2001514 inlägg
#10

Japp.

samt
BD 0005 09JUL 10 23611341282
BD 0005 09JUL 0 23611341282
BD 0007 09JUL 31 61845741850
BD 0007 09JUL 0 61845741850

Dock så på detta nummer 23611341282 så finns det 6 poster.

Det spelar ingen roll vilken vikt egentligen, då dem kommer att vara samma i livesystemet, men om det nu på någon post inte skulle var samma i live så skulle jag vilja ha det högsta talet.

Medlem sedan dec. 200012 464 inlägg
#11

Har du någon primärnyckelskolumn (räknare) i tabellen?

Medlem sedan juli 2001514 inlägg
#12

Nix.

Det finns ingen primär nyckel/räknare i tabellen

Medlem sedan dec. 200012 464 inlägg
#13
SELECT capacity.flight, [capacity.date], max(stats.kgs), min(stats.awb )
FROM capacity inner join stats on capacity.flight = stats.flight and capacity.date = stats.date 
Where [capacity.date] = '01AUG' 
AND capacity.route ='GLA LHR' 
group by capacity.flight, [capacity.date]
order by capacity.date, capacity.Flight, 4
Medlem sedan juli 2001514 inlägg
#14

Nu får jag inga dubletter, men det saknas en del.
På frågan skall jag få 6 stycken svar, men jag får bara tre.

Medlem sedan dec. 200012 464 inlägg
#15

Jag har lite svårt att se exakt vad du vill ha fram för data. Kan du beskriva dina tabeller med lite datainnehåll och sedan säga vad du vill ha för resultat.

Medlem sedan juli 2001514 inlägg
#16

OK.

Jag har en tabell som heter capacity, innehållande alla flighter som går en viss dag innom en viss route.
- Flight
- Date
- Route

Sen har jag en tabell som heter stats, som innehåller en jäkla massa info (den är tagen från en stor loggfil)
I den finns det bla.
- Flight
- Date
- Weight
- AWB
+ en massa olika status fält som egentligen är oväsentligt.

I sökdialogen så skriver jag in ett datum och en route och då skall alla flighter visas under den dagen, med info om vilka AWB´er och vikten på denna AWB.

(AWB = fraktsedelsdokument)

Medlem sedan dec. 200012 464 inlägg
#17

Är detta fortfarande aktuellt?

Du visar inget datainnehåll så jag förstår inte vad du menar med duplikat.

Medlem sedan juli 2001514 inlägg
#18

japp fortfarande aktuellt, har bara varit lite förkyld ett tag.

Vad menar du med datainnehåll?

typ:
- Flight BD 0001
- Date 01AUG
- Route GLA LHR

- Flight BD 0001
- Date 01AUG
- Weight 509
- AWB 23611047433

???

Medlem sedan juli 2001514 inlägg
#19

Vet inte om det är ok, men jag skriver ett inlägg för att få upp denna fråga på listan igen....skäll inte på mig. :OO :e

Medlem sedan dec. 200012 464 inlägg
#20

Jo, ungefär så men att du har med de rader där du får problem med duplikat, alltså lite fler poster. Och så vill jag se vad du förväntar dig för resultat av frågan.

Om jag har det så kan jag testa själv och inte bara teoretisera.

266 ms totalt · 4 externa anrop · v20260731065814-full.50d4b5bd
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)