|
| PL/SQL - hjælp til MAX Fra : Martin M. Pedersen |
Dato : 21-08-07 11:51 |
|
Hejsa,
Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne
udtrække de rækker, hvor den nyeste dato er mindre end en vis dato.
Flg. virker ikke, men hvordan kan det gøres ?
SELECT * FROM tickets WHERE
MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
Mvh
Martin M. S. Pedersen
| |
Torben Frøberg (21-08-2007)
| Kommentar Fra : Torben Frøberg |
Dato : 21-08-07 19:45 |
|
Martin M. Pedersen wrote:
> Hejsa,
> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne udtrække
> de rækker, hvor den nyeste dato er mindre end en vis dato.
>
>
> Flg. virker ikke, men hvordan kan det gøres ?
>
> SELECT * FROM tickets WHERE
> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
>
> Mvh
> Martin M. S. Pedersen
Hvis det er oracle pl/sql skal du vist i stedet for max benytte
funktionen greatest.
Torben
| |
Martin M. Pedersen (23-08-2007)
| Kommentar Fra : Martin M. Pedersen |
Dato : 23-08-07 12:28 |
|
Torben Frøberg wrote:
> Martin M. Pedersen wrote:
>> Hejsa,
>> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne
>> udtrække de rækker, hvor den nyeste dato er mindre end en vis dato.
>>
>>
>> Flg. virker ikke, men hvordan kan det gøres ?
>>
>> SELECT * FROM tickets WHERE
>> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
>> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
>>
>> Mvh
>> Martin M. S. Pedersen
>
> Hvis det er oracle pl/sql skal du vist i stedet for max benytte
> funktionen greatest.
>
> Torben
Smart. tak.
/Martin
| |
Michael Zedeler (21-08-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 21-08-07 20:25 |
|
Martin M. Pedersen wrote:
> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne udtrække
> de rækker, hvor den nyeste dato er mindre end en vis dato.
>
> Flg. virker ikke, men hvordan kan det gøres ?
>
> SELECT * FROM tickets WHERE
> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
Så skal du bruge select-group by-having.
Prøv at kigge lidt på GROUP BY og HAVING.
Mvh. Michael.
| |
Kristian Damm Jensen (23-08-2007)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 23-08-07 11:01 |
|
Michael Zedeler wrote:
> Martin M. Pedersen wrote:
>> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne
>> udtrække de rækker, hvor den nyeste dato er mindre end en vis dato.
>>
>> Flg. virker ikke, men hvordan kan det gøres ?
>>
>> SELECT * FROM tickets WHERE
>> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
>> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
>
> Så skal du bruge select-group by-having.
>
> Prøv at kigge lidt på GROUP BY og HAVING.
Hvordan skulle det hjælpe? Der er ingen af de indbyggede SQL-funktioner, der
understøtter maximum eller minimum eller lignende over flere kolonner. Så
skal man ud i noget propritært som fx Torbens forslag for Oracle.
--
Venlig hilsen /Best regards
Kristian Damm Jensen
| |
Michael Zedeler (23-08-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 23-08-07 19:32 |
|
Kristian Damm Jensen wrote:
> Michael Zedeler wrote:
>> Martin M. Pedersen wrote:
>>> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne
>>> udtrække de rækker, hvor den nyeste dato er mindre end en vis dato.
>>>
>>> Flg. virker ikke, men hvordan kan det gøres ?
>>>
>>> SELECT * FROM tickets WHERE
>>> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
>>> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
>> Så skal du bruge select-group by-having.
>>
>> Prøv at kigge lidt på GROUP BY og HAVING.
>
> Hvordan skulle det hjælpe? Der er ingen af de indbyggede SQL-funktioner, der
> understøtter maximum eller minimum eller lignende over flere kolonner. Så
> skal man ud i noget propritært som fx Torbens forslag for Oracle.
Jeg har ikke læst spørgsmålet grundigt nok, så det kan ikke løses med
group by og having. Til gengæld kan man blot løse det med denne her:
SELECT *
FROM mintabel
WHERE post_1_date <= TO_DATE( [...] )
AND post_2_date <= TO_DATE( [...] )
...
AND post_5_date <= TO_DATE( [...] )
Da max(post_1_date, ..., post_5_date) <= x
<=> post_1_date <= x and ... and post_5_date <= x
Mvh. Michael.
| |
Kristian Damm Jensen (21-08-2007)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 21-08-07 14:17 |
|
Martin M. Pedersen wrote:
> Hejsa,
> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne
> udtrække de rækker, hvor den nyeste dato er mindre end en vis dato.
>
>
> Flg. virker ikke, men hvordan kan det gøres ?
>
> SELECT * FROM tickets WHERE
> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
SELECT * FROM tickets WHERE
post_1_date<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
AND post_2_date<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
AND post_3_date<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
AND post_4_date<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
AND post_5_date<=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
--
Venlig hilsen /Best regards
Kristian Damm Jensen
| |
Michael Zedeler (23-08-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 23-08-07 19:34 |
|
Martin M. Pedersen wrote:
> Hejsa,
> Jeg har en tabel med fem forskellige datoer, nu vil jeg gerne udtrække
> de rækker, hvor den nyeste dato er mindre end en vis dato.
>
>
> Flg. virker ikke, men hvordan kan det gøres ?
>
> SELECT * FROM tickets WHERE
> MAX(post_1_date,post_2_date,post_3_date,post_4_date,post_5_date)
> <=TO_DATE('13/04/2007 00:00:00','DD/MM/YYYY HH24:MI:SS');
Noget tyder på at du ikke har normaliseret din database korrekt. Hvad
for datoer er der tale om, siden de kan sammenlignes? Bruges de til det
samme eller hvad?
Jeg har iøvrigt svaret på dit spørgsmål. Se mit svar til Kristian.
Mvh. Michael.
| |
|
|