Avatar billede tblaster Nybegynder
01. marts 2003 - 14:20 Der er 6 kommentarer og
1 løsning

SQL - MIN & MAX

Hejsa

Jeg hvad er der galt her? Jeg prøver at trække den min og max tiden ud :-( Det kan man måske ikke med tider?

SQL = "SELECT Lokaler.Id, Lokaler.lokale, Booking.lokalenr, Booking.Dato, Booking.initialer, Booking.firma, MIN(Booking.tid) as start, MAX(Booking.tid) as slut, Booking.kommentar, Booking.samletpris, Booking.sagsnr, Booking.antal, Booking.tlf, Booking.foldevæg, Booking.projektør, Booking.KaffeThe, Booking.kaffekande, Booking.tekande, Booking.kaffekandeantal, Booking.tekandeantal, Booking.rundstykker, Booking.ost, Booking.eftermiddagskage, Booking.småkager, Booking.frugt, Booking.isvandkande, Booking.opdækning_uden_dug, Booking.opdækning_med_dug, Booking.buffet, Booking.buffetantal, Booking.bordopstilling FROM booking INNER JOIN Lokaler ON Booking.lokalenr = Lokaler.id WHERE Booking.bookid = " & Request.querystring("id") & ""


Jeg får denne:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'Id' as part of an aggregate function.
Avatar billede mortrr Praktikant
01. marts 2003 - 14:35 #1
Når du vil bruge "aggegate functions" i en select, skal du samtidigt forklare databasen hvilke felter du vil gruppere på.
Fx eksempel kunne man være ude efter den sidste booking af et lokale:
select lokaler.id, max(booking.tid) from lokaler, booking where booking.lokalenr=booking.id group by lokaler.id
Her får du alle lokale-id'er med den maksimale tid pr id.

Du skal tilføje alle de felter du vil have med i din select-liste (lokaler.id, lokaler.lokale ...) til en Group By

- Morten
Avatar billede tblaster Nybegynder
01. marts 2003 - 14:42 #2
Hvis jeg kun grouper den by en eks. lokaler.id får jeg:

[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'bordopstilling' as part of an aggregate function.

Hvis jeg derimod grouper by alle som nederstående så kommer der ingen fejl men max og min tid skrives heller ikke ud. Nedenunder er også hvordan jeg skriver dem ud. Er det i udskrivningen der er fejl? Jeg er nemlig ikke sikker på hvordan man udskrive en max og det er derfor jeg har brugt as i min sql!

SQL = "SELECT Lokaler.Id, Lokaler.lokale, Booking.lokalenr, Booking.Dato, Booking.initialer, Booking.firma, MIN(booking.tid) as min, MAX(booking.tid) as max, Booking.kommentar, Booking.samletpris, Booking.sagsnr, Booking.antal, Booking.tlf, Booking.foldevæg, Booking.projektør, Booking.KaffeThe, Booking.kaffekande, Booking.tekande, Booking.kaffekandeantal, Booking.tekandeantal, Booking.rundstykker, Booking.ost, Booking.eftermiddagskage, Booking.småkager, Booking.frugt, Booking.isvandkande, Booking.opdækning_uden_dug, Booking.opdækning_med_dug, Booking.buffet, Booking.buffetantal, Booking.bordopstilling FROM booking INNER JOIN Lokaler ON Booking.lokalenr = Lokaler.id WHERE Booking.bookid = " & Request.querystring("id") & " GROUP BY Lokaler.Id, Lokaler.lokale, Booking.lokalenr, Booking.Dato, Booking.initialer, Booking.firma, Booking.kommentar, Booking.samletpris, Booking.sagsnr, Booking.antal, Booking.tlf, Booking.foldevæg, Booking.projektør, Booking.KaffeThe, Booking.kaffekande, Booking.tekande, Booking.kaffekandeantal, Booking.tekandeantal, Booking.rundstykker, Booking.ost, Booking.eftermiddagskage, Booking.småkager, Booking.frugt, Booking.isvandkande, Booking.opdækning_uden_dug, Booking.opdækning_med_dug, Booking.buffet, Booking.buffetantal, Booking.bordopstilling"

rs.Open SQL, Conn


        x = 0
        For x = 1 to 9999
        If rs.eof then
        Exit For
        Else

Start = Left(min,5)
Slut = Left(max,5)
%>

                        <tr>
                          <td width="32%">Start:</td>
                          <td width="68%"><% = Start  %></td>
                        </tr>
                        <tr>
                          <td width="32%">Slut:</td>
                          <td width="68%"><% = Slut  %></td>
                        </tr>
Avatar billede mortrr Praktikant
01. marts 2003 - 14:50 #3
Det er sådan set rigtigt nok (jeg går ud fra at du lægger flet-værdien over i min og max udenfor det du viser).

Det vil være en god ide at vælge et andet navn end min og max.
MIN(booking.tid) as minTid, MAX(booking.tid) as maxTid
Start = Left(rs("minTid"),5)
Slut = Left(rs("maxTid"),5)

Om du så får noget der giver mening, kommer an på indholdet af din database. ;-)

- Morten
Avatar billede mortrr Praktikant
01. marts 2003 - 14:50 #4
jeg mener selvfølgelig "felt-værdien" og ikke "flet-værdien".
Avatar billede tblaster Nybegynder
01. marts 2003 - 14:54 #5
Thx a lot!
Avatar billede tblaster Nybegynder
01. marts 2003 - 14:55 #6
Kender du også til UNION funktionen? Den har jeg nemlig også nogle problemer med :-(
Avatar billede tblaster Nybegynder
01. marts 2003 - 14:55 #7
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester