Avatar billede lsskaarup Nybegynder
14. marts 2011 - 22:22 Der er 8 kommentarer og
1 løsning

Samling af 2 datetime felter, og sortering heraf

Jeg har 2 datetime felter, som jeg gerne vil have samlet, så jeg kan sortere dem som et stort felt.

Men hvordan gør jeg lige det?

ORDER BY gemtdato DESC, aktivdato DESC

sorterer jo hver enkelt felt for sig selv, og ikke som et stort.
Avatar billede arne_v Ekspert
14. marts 2011 - 22:26 #1
Hvad betyder det at sortere efter to dato felter som et felt??
Avatar billede lsskaarup Nybegynder
14. marts 2011 - 22:48 #2
I min tabel, har en jeg masse records, som hver har 2 datetime felter, en der viser hvornår record er gemt, og en der viser hvornår den er sat aktiv.

Sortering:
gemtdato (07-02-11)
aktivdato (06-02-11)
aktivdato (05-02-11)
gemtdato (04-02-11)
aktivdato (03-02-11)
gemtdato (02-02-11)
gemtdato (01-02-11)

og ikke
gemtdato (07-02-11)
gemtdato (04-02-11)
gemtdato (02-02-11)
gemtdato (01-02-11)
aktivdato (06-02-11)
aktivdato (05-02-11)
aktivdato (01-02-11)

Gør det, det mere klart?
Avatar billede arne_v Ekspert
14. marts 2011 - 22:59 #3
Ikke helt.

En SELECT vil returnere en række per række i tabellen - du synes at have 2 rækker per tabel.

Men et skud i tågen:

ORDER BY MIN(gemtdato,aktivdato) DESC

eller:

ORDER BY MAX(gemtdato,aktivdato) DESC
Avatar billede lsskaarup Nybegynder
14. marts 2011 - 23:33 #4
"2 rækker per tabel"... Der forstår jeg dig ikke.

Min select returnerer kun en række, denne række indeholder bare 2 datofelter.

Forestil dig et tilbud, det kan indeholde et id, sagsnavn, dato for oprettelse og dato for afsendelse af tilbuddet.

Selecten der trækker data ud om sagerne, skal sortere dem, så de ligger med den nyeste øverste og ældste nederste, og den skal ikke se de 2 datofelter hver for sig, men som et felt.

Jeg skal altså have noget lignede en merge på de 2 datofelter, så de bliver til et felt
Avatar billede arne_v Ekspert
15. marts 2011 - 01:21 #5
Lad os forestille os data:

1    aaaa      14-mar-2011      17-mar-2011
2    bbbb      15-mar-2011      16-mar-2011

hvordan skal output se ud?
Avatar billede lsskaarup Nybegynder
15. marts 2011 - 14:19 #6
Forudæstter at den først kolonne er gemtdato og den sidste er aktivdato.

I dit eksempel, skal der bare sorteres efter aktivdato, men idet ikke alle rækker har en aktivdato, kan det lige så godt se sådanne ud: (ændrede lige lidt på data, for at kunne symbolisere det jeg ville)

1    aaaa      14-mar-2011      0000-00-00
2    bbbb      16-mar-2011      16-mar-2011
3    cccc      13-mar-2001      13-mar-2011
4    dddd      12-mar-2001      15-mar-2011

Så skal outputtet sorteres således:

2    bbbb      16-mar-2011      [16-mar-2011]
4    dddd      12-mar-2001      [15-mar-2011]
1    aaaa      [14-mar-2011]      0000-00-00
3    cccc      13-mar-2001      [13-mar-2011]

Jeg har sat [] uden om de datoerne det sorteres efter.
Avatar billede arne_v Ekspert
15. marts 2011 - 14:53 #7
... ORDER BY IFNULL(aktivdato,gemtdato) DESC

hvis du bruger NULL ellers noget a la:

... ORDER BY IF(aktivdato<>'0000-00-00',aktivdato,gemtdato) DESC
Avatar billede lsskaarup Nybegynder
15. marts 2011 - 15:38 #8
Det er smukt!

Det sidste ser i hvert fald ud til at virke, på min lille test.

Tak for hjælpen Arne, og smid et svar.
Avatar billede arne_v Ekspert
15. marts 2011 - 15:55 #9
svar
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