Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la syntaxe correcte pour le partitionnement en SQL

Somme cumulée utilisant 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

violon

L'ordre des colonnes de sortie est critique (les calculs dans les colonnes de sortie d'une ligne sont effectués strictement dans l'ordre dans lequel ils sont écrits). Mais peu importe si cet exemple est utilisé comme sous-requête ou si les données de sortie sont accessibles par des noms de colonne.