/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL og udtræk af rabatter
Fra : Søren


Dato : 16-01-06 20:07

Jeg har følgende inserts i min rabat tabel:
2006-02-01 2006-02-28 10%
2006-02-10 2006-02-20 25%
2006-02-15 2006-02-25 50%
2006-02-17 2006-02-18 100%
2006-03-01 2006-03-31 0%

Jeg agter altid at give den største rabat, så tabellen kan liniært skrives
på følgende måde:
2006-02-01 2006-02-09 = 10%
2006-02-10 2006-02-14 = 25%
2006-02-15 2006-02-16 = 50%
2006-02-17 2006-02-18 = 100%
2006-02-19 2006-02-25 = 50%
2006-02-26 2006-02-28 = 10%

Igen kan det omskrives til:
10% = 12 dage
25% = 5 dage
50% = 9 dage
100% = 2 dage

Det som jeg så ikke helt kan finde ud af er, at lave et bare nogenlunde
fornuftigt udtræk af den sidste omskrivning, hvis man tager fra dags dato og
til f.eks. 2006-03-01!?

Er der nogen gode bud? Jeg køre med MySQL 5.



 
 
Nis Jorgensen (16-01-2006)
Kommentar
Fra : Nis Jorgensen


Dato : 16-01-06 21:55

On Mon, 16 Jan 2006 20:06:50 +0100, "Søren" <soren@removethis.com>
wrote:

>Jeg har følgende inserts i min rabat tabel:
>2006-02-01 2006-02-28 10%
>2006-02-10 2006-02-20 25%
>2006-02-15 2006-02-25 50%
>2006-02-17 2006-02-18 100%
>2006-03-01 2006-03-31 0%
>
>Jeg agter altid at give den største rabat, så tabellen kan liniært skrives
>på følgende måde:
>2006-02-01 2006-02-09 = 10%
>2006-02-10 2006-02-14 = 25%
>2006-02-15 2006-02-16 = 50%
>2006-02-17 2006-02-18 = 100%
>2006-02-19 2006-02-25 = 50%
>2006-02-26 2006-02-28 = 10%
>
>Igen kan det omskrives til:
>10% = 12 dage
>25% = 5 dage
>50% = 9 dage
>100% = 2 dage
>
>Det som jeg så ikke helt kan finde ud af er, at lave et bare nogenlunde
>fornuftigt udtræk af den sidste omskrivning, hvis man tager fra dags dato og
>til f.eks. 2006-03-01!?
>
>Er der nogen gode bud? Jeg køre med MySQL 5.

Jeg ved ikke lige hvad mysql kan efterhaanden. Jeg gaar her ud fra at
den understoetter subselect, views mm

Hvis du nu havde en tabel "datoer" med alle de relevante datoer, kunne
du bruge

SELECT maxrabat, count(dato) FROM (
SELECT max(rabat) AS maxrabat, dato
FROM rabatter JOIN datoer ON dato BETWEEN startdato AND slutdato
)

"datoer" kunne fx laves ud fra en tabel "heltal" med tallene fra 1 til
1000:

SELECT today() + heltal.i AS dato
FROM heltal
WHERE dato BETWEEN today() AND '2006-03-01'


Tilsammen faar vi:

SELECT maxrabat, count(dato) FROM (
SELECT max(rabat) AS maxrabat, dato
FROM rabatter JOIN (
SELECT today() + heltal.i AS dato
FROM heltal
WHERE dato BETWEEN today() AND '2006-03-01'
) ON dato BETWEEN startdato AND slutdato
)

Alt sammen uden at checke syntax eller funktionsnavne.

/Nis
--
Nis Jørgensen
Udlandsbornholmer

Søren (16-01-2006)
Kommentar
Fra : Søren


Dato : 16-01-06 22:33

>>Det som jeg så ikke helt kan finde ud af er, at lave et bare nogenlunde
>>fornuftigt udtræk af den sidste omskrivning, hvis man tager fra dags dato
>>og
>>til f.eks. 2006-03-01!?
>>Er der nogen gode bud? Jeg køre med MySQL 5.
>
> Hvis du nu havde en tabel "datoer" med alle de relevante datoer, kunne
> du bruge
[CUT]

> Tilsammen faar vi:
> SELECT maxrabat, count(dato) FROM (
> SELECT max(rabat) AS maxrabat, dato
> FROM rabatter JOIN (
> SELECT today() + heltal.i AS dato
> FROM heltal
> WHERE dato BETWEEN today() AND '2006-03-01'
> ) ON dato BETWEEN startdato AND slutdato
> )

Ja, undskyld men det forstår jeg ikke meget af. Jeg har ikke en ekstra tabel
til datoer, da de står i én og samme tabel. Tabellen har "start", "slut" og
"rabat".

En måde at gøre det på kunne være, at gennemgå alle dage - én dag af gangen
og se hvilken rabat sats der var gældende den dag, men det lyder noget
omstændigt og det ville give en masse (unødvendige?) database opslag.



Nis Jorgensen (17-01-2006)
Kommentar
Fra : Nis Jorgensen


Dato : 17-01-06 02:26

On Mon, 16 Jan 2006 22:32:39 +0100, "Søren" <soren@removethis.com>
wrote:

>>>Det som jeg så ikke helt kan finde ud af er, at lave et bare nogenlunde
>>>fornuftigt udtræk af den sidste omskrivning, hvis man tager fra dags dato
>>>og
>>>til f.eks. 2006-03-01!?
>>>Er der nogen gode bud? Jeg køre med MySQL 5.
>>
>> Hvis du nu havde en tabel "datoer" med alle de relevante datoer, kunne
>> du bruge
>[CUT]
>
>> Tilsammen faar vi:
>> SELECT maxrabat, count(dato) FROM (
>> SELECT max(rabat) AS maxrabat, dato
>> FROM rabatter JOIN (
>> SELECT today() + heltal.i AS dato
>> FROM heltal
>> WHERE dato BETWEEN today() AND '2006-03-01'
>> ) ON dato BETWEEN startdato AND slutdato
>> )
>
>Ja, undskyld men det forstår jeg ikke meget af. Jeg har ikke en ekstra tabel
>til datoer, da de står i én og samme tabel. Tabellen har "start", "slut" og
>"rabat".

Forstaaet. Min pointe var at HVIS du kan finde en subquery der giver
dig alle de relevante datoer, kan du bruge denne som angivet. Jeg
angiver saa hvordan du kan goere dette ud fra en tabel der indeholder
heltal.

>En måde at gøre det på kunne være, at gennemgå alle dage - én dag af gangen
>og se hvilken rabat sats der var gældende den dag, men det lyder noget
>omstændigt og det ville give en masse (unødvendige?) database opslag.

Grundlaeggende er det det jeg goer ovenfor - blot lader jeg databasen
om det grove.

/Nis
--
Nis Jørgensen
Udlandsbornholmer

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408173
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste