Avatar billede sth Novice
29. september 2008 - 20:09 Der er 6 kommentarer og
1 løsning

Problemer med LIMIT (LIMIT x,30)

Problemer med LIMIT

Jeg har en tabel der indeholder nogle lager data, min tabel ser sådan ud

CREATE TABLE `vmi_stock` (
  `vmi_stock_id` int(9) NOT NULL auto_increment,
  `vmi_stock_cust` varchar(10) default NULL,
  `vmi_stock_part` varchar(10) default NULL,
  `vmi_stock_date` varchar(10) default NULL,
  `vmi_stock_on_stock` double(10,2) default '0.00',
  `vmi_stock_min` double(10,2) default '0.00',
  `vmi_stock_max` double(10,2) default '0.00',
  PRIMARY KEY  (`vmi_stock_id`),
  KEY `vmi_stock_cust` (`vmi_stock_cust`,`vmi_stock_part`)
) TYPE=MyISAM;


Her i min test har jeg data for de sidste 37 dage jeg skal altid bruge data for de sidste 37 dage
Jeg havde derfor tænkt mig at noget i stil med denne sql:
SELECT *
From vmi_stock
order by vmi_stock_date
LIMIT 7,30


Og det går jo også fint for jeg SKAL have den laveste dato først og den nyeste til slut, da jeg skal bruge disse tate i denne rækkefølge til nogle beregninger ( bedste rette linje og andre former for statistik)

Men når jeg så vil lave gennemsnit på et felt så går det galt, denne sql virker ikke  :
SELECT avg(vmi_stock_on_stock)
From vmi_stock
order by vmi_stock_date ASC
LIMIT 7,30

Denne virker dog godt nok:
SELECT avg(vmi_stock_on_stock)
From vmi_stock
order by vmi_stock_date ASC
LIMIT 7,30

Men så før jeg jo de 30 ældste datoer og det går jo ikke , hvad gør jeg?

Lige nu har jeg løst det ved at overføre de 30 nyste datoer til en temp tabel  og så bruge dem der fra, men det kan vel ikke være den rigtige måde, kan det ?
Avatar billede arne_v Ekspert
30. september 2008 - 04:20 #1
Din query der ikke virker og virker er ens, så du må have copy pastet forkert den ene gang.

Jeg gætter på at det er noget a la dette du leder efter:

SELECT vmi_stock_date,AVG(vmi_stock_on_stock) AS calcavg
FROM (SELECT vmi_stock_date,vmi_stock_on_stock
      FROM vmi_stock
      ORDER BY vmi_stock_date DESC
      LIMIT 7,30) x
ORDER BY vmi_stock_date ASC
Avatar billede sth Novice
01. oktober 2008 - 16:28 #2
hje arne ja du har selvf hetl ret, den der "virker" men jeg ikke kan bruge fordi jeg så ikke få dem i den rigtige rækkefølge er :
SELECT avg(vmi_stock_on_stock)
From vmi_stock
order by vmi_stock_date ASC
LIMIT 30

jeg ahr prøvet med din select inde i en select ( må indrømme at jeg aldrig har prøvet ensådan før) men får denne fejl

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-4.0.14-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT vmi_stock_date,vmi_stock_on_stock FROM vmi_stock ORDER


hvilken ver. af mysql skal man mindst have for at det virker ? min udbyder har ver. 4.1.22
Avatar billede arne_v Ekspert
01. oktober 2008 - 17:57 #3
Du skal mindst have 4.1 - maaske endda 5.0.

Fejlmeddelelsen siger 4.0.14, hvilket ihvertfald ikke duer.

Hvos upgrade ikke er en option, saa laes ind i forkert raekkefoelge og sorter
data i applikationen som du vil have det.
Avatar billede sth Novice
01. oktober 2008 - 19:34 #4
upgrade er ikke en option, da det er en server hos en udbyder (danhost.dk ver. 4.1.22) og jeg har 4.0.14 på min egen pc.

kan jeg læse i "forkert"  rækkefølge og så læse samme data igen i den rigitge række følge uden at flytte dem til en tem tabel ? hvis ja da hvordan?
Avatar billede arne_v Ekspert
01. oktober 2008 - 19:48 #5
Jeg ville sortere data i memory i applikationen (PHP, Delphi, whatever) fremfor
i databasen med temp tabel.

Hvis der skal returneres 10 GB data er det naturligvis ikke en option, men ...
Avatar billede sth Novice
01. oktober 2008 - 20:26 #6
tak for dine "svar" kommer du med et rigitg svar, så er der point
Avatar billede arne_v Ekspert
01. oktober 2008 - 20:48 #7
gerne
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
Computerworld tilbyder specialiserede kurser i database-management

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