Wie daraus Standard SQL machen?

Habe da ne SQL die sieht so aus:

select id_reports,r.creation_date from reports r 
join capture_pos cp on (r.fk_capture_pos = cp.id_capture_pos)
where cp.fk_position = 81234 order by r.creation_date desc limit 1

Kann ich durch irgendwas das LIMIT ersetzten da es ja kein SQL Standard ist?
Ich brauche aber nur den Datensatz mit dem größten Datum.

Dein ‘order by … desc’ in Verbindung mit ‘limit 1’ wählt ja quasi das max() aus. Reicht das als Hinweis? Blöd wirds allerdings, wenn es mehrere Datensätze gleich max() gibt.

Aber warum willst Du auf LIMIT verzichten, das können ja selbst so primitive Systeme wie MySQL und ORACLE?

Andreas

MSSQL aber nicht das arbeitet mit top und standard ist REC_NUMBER oder liege ich da jetzt falsch?

Ist wenigstens max() überall gleich ?

Also das max() in das where einbauen oder wie ne in select?
Aber irgenwie blick ich das nicht beispiel bitte danke!

Ja.

Ist wenigstens max() überall gleich ?

Ja.

Also das max() in das where einbauen oder wie ne in select?
Aber irgenwie blick ich das nicht beispiel bitte danke!

Beispiel:

test=*# select * from telefon;
 id |   datum    | person |     nr
----+------------+--------+-------------
  1 | 2002-10-22 |      1 | 0171/123456
  2 | 2003-04-30 |      2 | 0172/123456
  3 | 2007-01-01 |      1 | 0174/123456
(3 rows)

-- nun mit limit
test=*# select * from telefon order by datum desc limit 1;
 id |   datum    | person |     nr
----+------------+--------+-------------
  3 | 2007-01-01 |      1 | 0174/123456
(1 row)

-- mit max()
test=*# select * from telefon where datum = (select max(datum) from telefon);
 id |   datum    | person |     nr
----+------------+--------+-------------
  3 | 2007-01-01 |      1 | 0174/123456
(1 row)

Andreas

Select r.id_reports,  r.creation_date from reports r join 
capture_pos cp on (r.fk_capture_pos = cp.id_capture_pos)
where cp.fk_position = 80044 and 
r.creation_date = (select max(r.creation_date) 
from reports r join capture_pos cp on (r.fk_capture_pos = cp.id_capture_pos)
where cp.fk_position = 80044) ;

So richtig ?

Danke für den Tipp und das Beispiel.

Sorry, ORA kann es scheinbar nicht, zumindest die 8.1, die ich hier habe. Oh mann, ist das alles schröklich…


Andreas

Jo ORA macht das mit

SELECT * FROM (
           SELECT
             ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
             columns
           FROM tablename
         )
         WHERE rownumber <= n

Was Standard sein sollte aber weder MSSQL noch von einer anderen im Internet gefundenen DB unterstützt wird. Manche arbeiten mit fetch andere mit Top der Rest mit Limit.

Man wer macht eigentlich diesen Standard und warum hält sich keiner dran oder des ist nen Zusatz der nicht unterstützt werden muss.

Egal das oben funkt auch wenn es nicht schön aussieht.