Datum Abfrage

  • Ersteller Ersteller helala_007
  • Erstellt am Erstellt am
H

helala_007

Guest
ich brauche bitte eure hilfe, ich habe versuche die SQL abfrage zu erstellen, aber die habe ich nicht geschafft ! kann mir vllt. jmd. dabei helfen ? danke sehr

Aufgabe ist im Anhang
s.jpg
 
Werbung:
ich brauche bitte eure hilfe, ich habe versuche die SQL abfrage zu erstellen, aber die habe ich nicht geschafft ! kann mir vllt. jmd. dabei helfen ? danke sehr

Aufgabe ist im Anhang

Wer stellt bitte solche Aufgaben?

Es besteht keine Notwendigkeit, künstlich erzeugte ID's fortlaufend zu haben. Faktisch JEDE DB stellt dafür Mittel bereit, die auch bei gleichzeitigen Zugriff vieler User funktionieren.

Als Ansatz, aber in PostgreSQL:

Du hast:
Code:
test=*# select * from id;
i
----
  3
  6
  9
10
12
15
(6 rows)

Freie ID's:

Code:
test=*# select * from id right join (select * from generate_Series(1, (select max(i) from id))) foo on id.i=foo.generate_series;
i  | generate_series
----+-----------------
  |  1
  |  2
  3 |  3
  |  4
  |  5
  6 |  6
  |  7
  |  8
  9 |  9
10 |  10
  |  11
12 |  12
  |  13
  |  14
15 |  15

Also schauen nach der meinetwegen kleinsten und größten Zahl aus der generate_series - Spalte, wo i NULL ist

Code:
test=*# select min(generate_series) from (select * from id right join (select * from generate_Series(1, (select max(i) from id))) foo on id.i=foo.generate_series) bla wherei is NULL;
min
-----
  1
(1 row)

Time: 9,395 ms
test=*# select max(generate_series) from (select * from id right join (select * from generate_Series(1, (select max(i) from id))) foo on id.i=foo.generate_series) bla wherei is NULL;
max
-----
  14
(1 row)

Die richtige Lösung für das Problem wären aber Sequencen, oder, bei MyZettelkasten, Autoincrement.
 
Zuletzt bearbeitet:
Werbung:
Mein Vorschlag für diese vieleicht etwas sinnfreie SQL-Aufgabe:
Code:
SELECT    max(id) AS id
FROM    (
SELECT    id - 1 AS id
FROM    tabelle
WHERE    id - 1 >= 0
) t
WHERE id NOT IN (    SELECT    id
                    FROM    tabelle )
bzw.
Code:
SELECT    max(id) AS id
FROM    (
SELECT    id - 1 AS id
FROM    tabelle
WHERE    id - 1 >= 0
) t
WHERE NOT EXISTS (
SELECT    1
FROM    tabelle
WHERE    id = t.id )
 
Zuletzt bearbeitet:
Zurück
Oben