Anmelden

View Full Version : SQL Datums Herausforderung



DEVJO
06-05-15, 09:16
Moin moin,

ich habe da ein kleines Problem mit einer Abfrage, wo ich nicht weiter komme.

Ich habe eine Kalenderdatei, wo für jeden Tag ein Datensatz vorhanden ist, diese will ich, via Datum, mit einer "Bestandsdatei" verknüpfen. In der Bestandsdatei ist der Status des Datensatzes (es können mehrere Sätze zu einem Datum existieren, der eine kann true sein, der andere (andere Laufnummer) kann false sein) entweder true / false.

Ich will jetzt aber nur die Sätze haben, die mindestens an 4 aufeinander folgenden Tagen true sind.

Hat jemand eine Idee?

Gruß
Jo

holgerscherer
06-05-15, 09:30
Hat jemand eine Idee?


Da es mit SQL hakeliger Aufwand werden könnte:
RPG? ;-)

-h

DEVJO
06-05-15, 09:42
hmmm....nicht das was ich mir erhofft hatte....

ExAzubi
06-05-15, 09:49
Als schnelle Idee: Common table expressen

USe X with AS (
Select KEY AS A, Count(KEY) from Bestand left join on DATUMDATEI on BDAT = DDAT and BSTAT = TRUE GROUP BY KEY, ORDER BY KEY HAVING COUNT(KEY) >=4)

Select * from BESTAND inner JOIN X on Bestand.key = X.KEY

oder so...

Pikachu
06-05-15, 10:34
Vielleicht so?


SELECT DISTINCT BB.* FROM Bestand BB, Bestand B1, Bestand B2, Bestand B3

WHERE BB.STATUS=1
AND B1.STATUS=1 AND B1.DATUM = BB.DATUM + 1 DAY
AND B2.STATUS=1 AND B2.DATUM = BB.DATUM + 2 DAYS
AND B3.STATUS=1 AND B3.DATUM = BB.DATUM + 3 DAYS

ORDER BY BB.DATUM

Fuerchau
06-05-15, 10:44
select Artikel, Count(*)
from bestand b
inner join Kalender k on k.tag between b.tag and b.tag + 3 days
where b.tag = 'Irgendeintag'
and b.status = true
Group by Artikel
having Count(*) = 4


So ähnlich könnte es gehen.

B.Hauser
06-05-15, 11:17
Ich würde Baldurs SQL noch etwas modifizieren:


With x as (Select c.datum
From Calendar c join Bestand b
on b.Datum between c.Datum and c.datum + 3 Days
and TrueFalse = 1
Group by c.Datum
Having Count(c.Datum) >= 4)
Select b.*
from x join Bestand b on x.Datum = b.Datum and TrueFalse = 1

Birgitta