Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist die richtige Syntax für die Partitionierung in SQL?

Kumulierte Summe mit UDV:

select
dateOfCheckup,
duration,

-- use intermediate variable @cur_dur for not calculate this value twice
@cur_dur := ((case when duration like '% hour%' then substring_index(duration, ' hour', 1) * 60 else 0 end) +
(case when duration like '%min%' then substring_index(substring_index(duration, ' min', 1), ' ', -1) + 0 else 0 end)) as minutes,

-- check does current @year_month is equal to previous, continue or restart @cum_sum
CASE WHEN @year_month = date_format(dateOfCheckup, '%Y-%m')
     THEN @cum_sum := @cum_sum + @cur_dur
     ELSE @cum_sum := @cur_dur
     END total,

-- store current @year_month for to use with next row
@year_month := date_format(dateOfCheckup, '%Y-%m') monthOfCheckup

from patient, 

-- initialize variables which will be used
(SELECT @year_month:='', @cum_sum:=0, @cur_dur:=0) variables

-- the rows must be processed in definite order
ORDER BY dateOfCheckup

Geige

Die Reihenfolge der Ausgabespalten ist entscheidend (die Berechnungen in den Ausgabespalten einer Zeile werden strikt in der Reihenfolge ausgeführt, in der sie geschrieben wurden). Aber es spielt keine Rolle, ob dieses Beispiel als Unterabfrage verwendet wird oder auf die Ausgabedaten über Spaltennamen zugegriffen wird.