[英]Sum Every N Records SQL
我有这个查询,它返回(紧接在“查询结果”下面)一个分组的日期(varchar)和一些值。 它们是经过收费广场的车辆。
SELECT SUBSTR(CAB_MOMENTO,1,12),
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END)
SUL_OESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END)
SUL_OESTE_COM,
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0
END) NORTE_LESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0
END) NORTE_LESTE_COM FROM
(SELECT a.idtransaccion, a.cab_momento, a.cab_via, a.comvsauto, b.NOME
FROM
(select idtransaccion, cab_momento, cab_via, cab_estacion AS ESTACION,
CASE ctl_clase
WHEN '01' THEN 1
WHEN '07' THEN 1
WHEN '08' THEN 1
ELSE 0
END comvsauto
FROM usrhost.atransaccion
WHERE cab_momento > '20170818000000') a
INNER join
(SELECT sen.estacion AS ESTACION, via.via AS VIA, sen.nome AS NOME FROM
usrhost.aestacion_sentido sen
INNER JOIN usrhost.avia via ON
sen.estacion = via.estacion
AND SubStr(via.via,3,1) = sen.sentido
ORDER BY 1,2) b ON
b.VIA = a.cab_via
AND b.ESTACION = a.ESTACION)
GROUP BY SUBSTR(CAB_MOMENTO,1,12)
ORDER BY 1
我每15分钟需要一笔款项(第一列)。
例如:从分钟X到分钟Y-1231 | 12314 | 1241 | 21415从分钟X + 15到分钟Y + 15-1111 | 13344 | 1345 | 22455 ...
先感谢您
您可以使用下面的表达式为您提供一个日期时间,并将分钟数调整为四分之一小时。 这使您能够轻松地将时间和日期分组。
CONVERT(datetime, LEFT(CONVERT(varchar(30), cab_momento, 126), 14) + RIGHT('0' + CONVERT(varchar(2), DATEPART(MINUTE, cab_momento) / 15 * 15), 2) + ':00.000', 126)
解决它! 非常感谢你。
SELECT SubStr(CAB_MOMENTO,1,10) ||' '||
CASE WHEN To_Number(SubStr(cab_momento,11,2)) < 15 THEN '00-15'
WHEN To_Number(SubStr(cab_momento,11,2)) < 30 THEN '15-30'
WHEN To_Number(SubStr(cab_momento,11,2)) < 45 THEN '30-45'
ELSE '45-00'
END As time_period, Sum(sul_oeste_auto),
Sum(sul_oeste_com),Sum(norte_leste_auto), Sum(norte_leste_com)
FROM (
SELECT SUBSTR(CAB_MOMENTO,1,12) AS cab_momento,
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END)
SUL_OESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('SUL','OESTE') THEN 1 ELSE 0 END)
SUL_OESTE_COM,
Sum(CASE WHEN COMVSAUTO = '1' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0
END) NORTE_LESTE_AUTO,
Sum(CASE WHEN COMVSAUTO = '0' AND NOME IN ('NORTE','LESTE') THEN 1 ELSE 0
END) NORTE_LESTE_COM FROM
(SELECT a.idtransaccion, a.cab_momento, a.cab_via, a.comvsauto, b.NOME
FROM
(select idtransaccion, cab_momento, cab_via, cab_estacion AS ESTACION,
CASE ctl_clase
WHEN '01' THEN 1
WHEN '07' THEN 1
WHEN '08' THEN 1
ELSE 0
END comvsauto
FROM usrhost.atransaccion
WHERE cab_momento > '20170818000000') a
INNER join
(SELECT sen.estacion AS ESTACION, via.via AS VIA, sen.nome AS NOME FROM
usrhost.aestacion_sentido sen
INNER JOIN usrhost.avia via ON
sen.estacion = via.estacion
AND SubStr(via.via,3,1) = sen.sentido
ORDER BY 1,2) b ON
b.VIA = a.cab_via
AND b.ESTACION = a.ESTACION)
GROUP BY SUBSTR(CAB_MOMENTO,1,12)
ORDER BY 1)
GROUP BY SubStr(CAB_MOMENTO,1,10),CASE WHEN
To_Number(SubStr(cab_momento,11,2)) < 15 THEN '00-15'
WHEN To_Number(SubStr(cab_momento,11,2)) < 30 THEN '15-30'
WHEN To_Number(SubStr(cab_momento,11,2)) < 45 THEN '30-45'
ELSE '45-00'
END
按1排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.