[英]SQL Casting datetime and using it for groupby
試圖找到我組織中每個ID的時差。 這是我當前的查詢:
SELECT Label, SUM(Diff)
FROM (
select distinct mr.deviceid, TO_CHAR(mr.readdate, 'MM/dd/yyyy HH:00 am') as Label, (MAX(ComputedReading) - MIN(ComputedReading)) AS Diff
from analytic.twmeterreading as mr
WHERE mr.ReadDate >= DATEADD(hour, -100, GetDate()) AND mr.ReadDate <= GetDate() and mr.orgunitid = 1
group by mr.deviceid, Label
order by label
) as ReadData
GROUP BY deviceid, Label
ORDER BY Label
數據類型為:
readdate:日期時間
deviceid:int
readdate的返回格式如下:
2018-08-17 07:01:16
2018-08-17 08:00:18
2018-08-17 14:59:41
2018-08-17 12:34:17
2018-08-17 06:02:06
2018-08-17 01:58:54
2018-08-17 12:02:14
2018-08-17 15:01:22
2018-08-17 11:03:16
2018-08-17 05:59:05
2018-08-17 14:02:29
2018-08-17 07:01:09
2018-08-17 09:58:17
2018-08-17 11:56:42
2018-08-17 02:01:13
2018-08-17 15:03:28
2018-08-17 06:03:45
2018-08-17 17:01:22
當我從查詢中排除:00 am時,我會得到結果。 我不知道為什么將這些作為查詢結果的一部分添加為全0。
示例:對於此類型:TO_CHAR(mr.readdate,'MM / dd / yyyy')作為標簽
結果是這樣的:
label sum
08/18/2018 108
08/18/2018 3
08/18/2018 254
08/18/2018 50
08/18/2018 229
08/18/2018 983
08/18/2018 434
08/18/2018 64
08/18/2018 2
08/18/2018 0
08/18/2018 370
當我這樣做時:TO_CHAR(mr.readdate,'MM / dd / yyyy hh:00 AM')作為Label我得到全部的0。
任何想法? 順便說一句,這很重要
我不清楚您想要什么,但這是一個似乎可行的示例:
SELECT deviceid, Label, SUM(Diff)
FROM (
SELECT
mr.deviceid,
mr.readdate::date as Label,
(MAX(ComputedReading) - MIN(ComputedReading)) as Diff
FROM twmeterreading as mr
WHERE mr.ReadDate::date >= current_date
AND mr.ReadDate::date <= current_date
AND mr.orgunitid = 1
GROUP BY mr.deviceid, Label
) as ReadData
GROUP BY deviceid, Label
ORDER BY Label
實時代碼位於: http : //sqlfiddle.com/#! 15/ 8f3c0/2
我使用了postgresql,因為它似乎最接近redshift。 請注意,日期轉換功能有些不同。
請評論距您所需答案有多近,我會進行調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.