[DB2] Spezial abfrage

1. Gut :)
2. dein Where statement gehört in die Klammer rein wo auch table1 drin steht (das was den Alias x hat)
3. ich glaube wenn du mit DATE() - DATE() arbeitest, musst du die Reihenfolge umkehren (und der Vollständigkeit halber würde ich die zwei noch in eine Klammer packen): (date - i)
 
jo... Das mit date -i oder umgekehrt macht nix aus...
wenn ich das where in die klammer schreib ist die ladezeit um 20% schneller!

danke ;)
 
Moin baer1,

das bekommen wir aber etwas schlanker hin...
SQL:
with  grpTable1 ( date, mat, drdiff) as (
  select date, Mat
  , dense_rank() over (order by date)
  - row_number() over (partition by mat order by date) drdiff
  from  (select distinct date, mat from table1
   -- WHERE date >=.. and date <=...
   )  d
)
select mat
, min(date) as vonDatum
, max(date) as bisDatum
from grptable1
group by mat , drdiff

P.S. ich habe jetzt den Feldnamen "date" wie in deiner Vorlage übernommen ohne einen Alias voranzustellen.
DB2 schluckt das. Aber in einem PROD-Umfeld würde ich Feldnamen, die in SQL reservierte Worte sind, unbedingt vermeiden.
Wie du im SQL-Codefenster siehst, wird "DATE" auch als zum SQL-Sprachumfang gehörig erkannt und leuchtet rot. ;-)

Grüße
Biber
 
sehr sehr geil :) ...
gibt es noch eine möglichkeit das ich noch eine weitere Spalte erhalte in der steht wieviele einheiten Gruppiert wurden?

also MAT | FROM_DATE | TO_DATE | STK ?

Danke

@Biber: leider existiert die tabelle bereits so :( ... wenn ich was ändern könnte, würd ich gleich SQL nehmen!
 
Zuletzt bearbeitet:
Moin baeri,

das ist machbar (mit Anmerkungen, s.u)

SQL:
with grpTable1 ( date, mat, stk, drdiff) as (
  select date, Mat, stk
  , dense_rank() over (order by date)
  - row_number() over (partition by mat order by date) drdiff
from  (select date, mat, count(*) as stk from table1
--   where date >= ...  AND Date <= ..
group by date, mat)  d
)
select mat
, min(date) as vonDatum
, max(date) as bisDatum
, sum (stk) as Stk
from grptable1
group by mat , drdiff
order by vondatum, bisdatum, mat

Anmerkungen:

a) wenn tatsächlich irgendwas aggregiert werden soll, dann muss leider die bisherige "SELECT DISTINCT"-Zeile in eine "SELECT.. GROUP BY"-Zeile geändert werden.
Bei BaseBallbatBoy genau wie bei mir.

Wenn du das auf deinem PROD-Hobel machst mit den erwähnten paar Mio Datensätzen, dann stelle sicher, dass du brauchbare Indexe auf der Tabelle hast - vorzugsweise auf "DATE, MAT" ;-)

b) als Aggregatfunktion habe ich jetzt nur ein COUNT(*) der Datensätze pro Tag und Mat gemacht.
Wenn du tatsächlich die Einheiten willst, dann ersetze (oder ergänze) noch ein "SUM(Einheiten) as EA" - wobei ich nicht weiss, wie diese Feld bei dir wohl heissen mag.

Grüße
Biber
 
Hi Biber,
jo, ich habe Jeweils eine Einheit (Datensatz) Pro MAT daher passt das so...

Vielen vielen Dank, läuft perfekt :)

Grüße
baer
 
Zurück