|
|
Up |
|
|
  |
Author: Troels ArvinTroels Arvin Date: Mar 9, 2008 14:53
On Sun, 09 Mar 2008 20:01:07 +0100, Thorkil Olesen wrote:
> Den eneste måde, jeg kan regne ud, er at oprette en kalender-tabel med
> alle datoer, og bruge en LEFT JOIN.
Jeg tror, det er en løsning, man ser mange steder, og den er i og for sig
fin.
(Man kunne godt ønske sig, at der i databaser var en række "leksikon"-
tabeller med forskellige kalendre, landekode/tidszone/valuta/...-
mappings, m.v. Evt. implementeret som virtuelle tabeller, der på "lazy"
vis udfoldede sig efter behov.)
> Mit næste problem er at lave det om til et view, men følgende vil ikke
> virke:
>
> SELECT * FROM kalender LEFT JOIN data ON kalender.dato = data.dato
> WHERE kalender.dato BETWEEN [startdato] AND [slutdato] AND ...[kriterier
> i data-tabellen]... ORDER BY kalender.dato
Hvilken fejlmeddelelse får du? Noget, der lige springer i øjnene er ORDER
BY, som ikke rigtig giver mening i et view.
|
| Show full article (0.97Kb) |
|
| | 3 Comments |
|
  |
Author: Thorkil OlesenThorkil Olesen Date: Mar 11, 2008 17:16
Troels Arvin wrote:
> On Sun, 09 Mar 2008 20:01:07 +0100, Thorkil Olesen wrote:
>> Den eneste måde, jeg kan regne ud, er at oprette en kalender-tabel med
>> alle datoer, og bruge en LEFT JOIN.
>
> Jeg tror, det er en løsning, man ser mange steder, og den er i og for sig
> fin.
OK.
> (Man kunne godt ønske sig, at der i databaser var en række "leksikon"-
> tabeller med forskellige kalendre, landekode/tidszone/valuta/...-
> mappings, m.v. Evt. implementeret som virtuelle tabeller, der på "lazy"
> vis udfoldede sig efter behov.)
Ja, netop. Det må vi ønske hos udviklerne...
|
| Show full article (1.46Kb) |
|
| | no comments |
|
  |
Author: Jens Gyldenkærne ClausenJens Gyldenkærne Clausen Date: Mar 12, 2008 06:54
Thorkil Olesen skrev:
> Fejlen i ovenstående er, at hvis der for en dato eksisterer en
> post, som ikke opfylder kriterierne, så kommer den med i
> JOIN'et, men blive udelukket af WHERE-udtrykket. Datoen falder
> derfor helt ud i resultatet.
Hvis kriterierne for data-tabellen er konstante, kan de lægges ind
før viewet:
CREATE VIEW ok_data AS
SELECT * FROM data
WHERE [...datakriterier...]
CREATE VIEW kal_data AS
SELECT * FROM kalender LEFT JOIN ok_data
ON kalender.dato = ok_data.dato
Alternativt kan du bruge et flag til at markere datamatch:
SELECT CASE WHEN [datakriterier] THEN 1 ELSE 0 END AS datamatch, *
FROM kal_data
WHERE dato BETWEEN [startdato] and [slutdato]
(ovenstående er MSSQL-syntaks, men jeg gætter på at postgreSQL har
noget tilsvarende)
|
| Show full article (1.01Kb) |
| no comments |
|
  |
|
|
  |
Author: Thorkil OlesenThorkil Olesen Date: Mar 13, 2008 15:16
Jens Gyldenkærne Clausen wrote:
> Thorkil Olesen skrev:
>
>> Fejlen i ovenstående er, at hvis der for en dato eksisterer en
>> post, som ikke opfylder kriterierne, så kommer den med i
>> JOIN'et, men blive udelukket af WHERE-udtrykket. Datoen falder
>> derfor helt ud i resultatet.
>
> Hvis kriterierne for data-tabellen er konstante, kan de lægges ind
> før viewet:
Det er de ikke :-(
|
| Show full article (1.01Kb) |
| no comments |
|
|