Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Hilfe bei Select Abfrage (https://www.delphipraxis.net/207930-hilfe-bei-select-abfrage.html)

josef-b 18. Mai 2021 09:16

Datenbank: Firebird • Version: 2.5 • Zugriff über: Delphi

Hilfe bei Select Abfrage
 
Ich habe eine bisher einfache sql-Abfrage

Code:

Select lieferant, gueltig_ab from ARTIKEL_PREIS_EK_K
 where artikel_nr = :artikel_nr
 group by lieferant, gueltig_ab
Das Ergebnis ist in dem Fall:

Code:

Lieferant    Gueltig_AB
72442         01.06.2008
72442         07.08.2012
72442         10.08.2013
72442         18.06.2014
72442         09.05.2018
75894         01.02.2021
75894         01.06.2021
Ich möchte nun pro Lieferant den letzten Datensatz vor heutigem Datum und alle ab heute haben.

In diesem Fall wären das die letzten drei Sätze.

Ich habe überhaupt keinen Plan wie man das macht.

hoika 18. Mai 2021 09:22

AW: Hilfe bei Select Abfrage
 
Hallo,
schau Dir mal Having an.

mkinzler 18. Mai 2021 09:26

AW: Hilfe bei Select Abfrage
 
In so etwa (getippt un nicht getestet)
SQL-Code:
select
 lieferant, gueltig_ab
from
((Select
   first 1 lieferant, gueltig_ab
 from
   ARTIKEL_PREIS_EK_K
 where
  artikel_nr = :artikel_nr and
  gueltig_ab = CURRENT_DATE
 order by gueltig_ab desc)
union
(select
    lieferant, min(gueltig_ab)
 from
   ARTIKEL_PREIS_EK_K
 where
  artikel_nr = :artikel_nr and
  gueltig_ab > CURRENT_DATE)
)
group by lieferant;

Delphi.Narium 18. Mai 2021 09:46

AW: Hilfe bei Select Abfrage
 
Dashier ergibt den 1. Satz vor dem heutigen Datum
SQL-Code:
select
  first 1 lieferant, gueltig_ab
from
  ARTIKEL_PREIS_EK_K
where
  artikel_nr = :artikel_nr and
  gueltig_ab < CURRENT_DATE
order by
  gueltig_ab desc
Wir benötigen alle Sätze aus ARTIKEL_PREIS_EK_K, deren gültig_ab >= diesem Datum ist:
SQL-Code:
select k.lieferant, k.gueltig_ab
from ARTIKEL_PREIS_EK_K k
where k.artikel_nr = :artikel_nr
and  exists
(
  select 1 from ARTIKEL_PREIS_EK_K D
  where d.artikel_nr = :artikel_nr
  and  d.gueltig_ab < CURRENT_DATE
  and  k.lieferant = d.lieferant
  and  k.gueltig_ab >= d.gueltig_ab
  )
group by k.lieferant, k.gueltig_ab
Ungetestet hingedaddelt.

josef-b 18. Mai 2021 10:06

AW: Hilfe bei Select Abfrage
 
Danke für die schnellen Antworten

Habe jetzt mal den Ansatz von Markus genommen:

so kommt mein gewünschtes Ergebnis:

Code:

Select lieferant, gueltig_ab
from
( select lieferant, max(gueltig_ab) as gueltig_ab
from
 ARTIKEL_PREIS_EK_K
 where
  artikel_nr = :artikel_nr and
  gueltig_ab < CURRENT_DATE
  group by lieferant
union
Select lieferant, gueltig_ab
from
 ARTIKEL_PREIS_EK_K
 where
  artikel_nr = :artikel_nr and
  gueltig_ab >= CURRENT_DATE
  group by lieferant,gueltig_ab )
order by lieferant,gueltig_ab


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz