Avatar billede medjeti Nybegynder
08. juli 2001 - 01:10 Der er 15 kommentarer og
1 løsning

SQL: Select X antal poster indtil summen af en række er < Y

HejHej
Der er ikke en sql-kategori (?), så jeg håber der er nogen hajer her der kan hjælpe.

Jeg sidder med en KÆMPE sql-nød jeg skal have knækket!

Problemstillingen er enkel nok, jeg prøver at forklare:
Jeg skal bruge et recordset bestående af de første X antal poster fra tabellen - indtil summen af et vist felt er opfyldt. Antallet af poster er ligegyldigt, bare summen af et vist felt holder sig under Y.

I pseudo-sql:
SELECT FROM Tabel WHERE SUM(Felt) < 400
- men den holder desværre ikke :(

Håber der er nogen der kan hjælpe!
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 01:13 #1
Skal det være i ren SQL? Hvad med at vælge alle, og så i en løkke i ASP (?)
finde dem, der giver summen. Du skal vel også have dem ordnet efter et
eller andet, eller er det ligemeget hvilke, der giver summen?
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 01:19 #2
hmm .. kan man ikke (en løs tanke)

SELECT id,mitfelt,SIM(felt) AS tmp FROM Tabel WHERE tmp < 400

?
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 01:20 #3
SUM .. ikke SIM
Avatar billede medjeti Nybegynder
08. juli 2001 - 01:21 #4
Jep, det skal MEGET gerne være en ren SQL-streng (ikke stored procedure), da jeg skal implementere paging ovenpå bagefter. Summen skal komme fra ét specifikt felt.

Jeg har prøvet mig frem med HAVING, GROUP BY osv., men har ikke kunnet få noget til at virke.
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 01:21 #5
nej, td, det kan man ikke :)
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 01:22 #6
Hvad er din platform: Access, MS SQL, MySql ? Jeg er sikker på man kan i
den sidste af disse.
Avatar billede tdaugaard Nybegynder
08. juli 2001 - 01:23 #7
e.j.:> it was worth a shot ;-)
Avatar billede medjeti Nybegynder
08. juli 2001 - 01:26 #8
Jep, det lød ikke dumt, men den gik ikke...
Platformen er ASP / Access 2000.
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 01:38 #9
Nå, ja, det kender jeg ikke så meget til. I MySql kan man gøre dette

mysql>SET @sum:=0:

mysql>select *,(@sum:=@sum+antal) as a from table having @sum<12 order by d;
+------------+----+------+
| d          | antal |  a  |
+------------+----+------+
| 2000-09-03 |  3 |    3 |
| 2000-10-01 |  5 |    8 |
| 2001-11-02 |  4 |  12 |
+------------+----+------+
3 rows in set (0.00 sec)

og der er flere rækker i den originale tabel. Hvad der virker i Access aner jeg ikke.

Avatar billede medjeti Nybegynder
08. juli 2001 - 01:39 #10
Okay, lad mig forklare:
Jeg har en samling billeder af forskellig bredde, og en 400px bred side de skal være på. Alt efter billedernes bredde er der plads til et variabelt antal billeder.
Som sagt er det uhensigtsmæssigt at asp\'e mig ud af det, da der kommer mange sider, som der skal pages imellem.
Jeg har billedernes bredde gemt i db\'en sammen med de respektive id-numre + et \'kategori\'-felt som også skal trækkes ud.
Jeg begynder lidt at miste troen, men lad endelig de gode forslag strømme :)
Avatar billede medjeti Nybegynder
08. juli 2001 - 01:42 #11
Erik: Den går nok desværre ikke - især ikke når jeg gerne skulle kunne knalde sql-strengen af fra asp-siden uden brug af stored procedures etc.
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 01:44 #12
Jamen, den er en normal SQL-streng - ingen stored procedure. Det bruges en global
variabel i MySql. Og så tager den lige altid én tupel for meget med, men det er noget
med rækkefølgen af tingene. Men det virker garanteret ikke i Access :(
Avatar billede medjeti Nybegynder
08. juli 2001 - 02:17 #13
Okay, det ser fornuftigt nok ud, men jeg synes ikke jeg kan få puttet deklareringen (SET @sum:=0:) med ind i en enkelt linie...
Avatar billede erikjacobsen Ekspert
08. juli 2001 - 08:29 #14
I PHP/MySQl er det også to SQL-kald - men du skal slet ikke regne med at
syntaksen overhovedet passer. Du kan jo undersøge om Access 2000 SQL
understøtter en eller anden form for \"globale variabler\".
Avatar billede jakoba Nybegynder
08. juli 2001 - 09:06 #15
Hvis man nu joiner tabellen med sig selv worstcase antal gange?
Gah. Det kan godt være det kan gøres.
Men det vil helt sikkert give en enorm belastning af databasen hvis du gør det med ren SQL. Der skal noget efterbehandling til.
fx et lille javascript på siden der grupperer et worstcase langt array du har udtrukket og fordeler billederne pænt.
eller bare standard HTML. skriv billederne som
<br><img ...> <img ...> <img ...> <img ...> <img ...> ...
så vil HTML dele dem op i linier efter behov.

mvh JakobA
Avatar billede medjeti Nybegynder
08. juli 2001 - 10:18 #16
Well, jeg bed i det sure æble og asp\'ede mig ud af det... Tak for alle forslagene
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