使用SQL GROUP BY从每小时数据到每日数据
我有一张这样的桌子:使用SQL GROUP BY从每小时数据到每日数据,sql,group-by,Sql,Group By,我有一张这样的桌子: fld_id fld_DateTime fld_Index 2017-07-01 00:00:00.000 5 2017-07-01 01:00:00.000 10 2017-07-01 02:00:00.000 15 2017-07-01 03:00:00.
fld_id fld_DateTime fld_Index
2017-07-01 00:00:00.000 5
2017-07-01 01:00:00.000 10
2017-07-01 02:00:00.000 15
2017-07-01 03:00:00.000 40
...........
...........
2017-07-01 23:00:00.000 70
2017-07-02 00:00:00.000 110
2017-07-02 01:00:00.000 140
2017-07-02 02:00:00.000 190
...............
...............
2017-07-02 23:00:00.000 190
我想做的是将它们分组,并计算每天fld_指数的总和,如下所示:
fld_id fld_DateTime SUM
2017-07-01 190
2017-07-02 400
以下是我尝试过的:
SELECT fld_dateTime, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE
AND fld_ConsDateTime BETWEEN '2017-07-01' AND '2017-08-02'
GROUP BY fld_dateTime
它计算总和,但仍为小时格式。如何实现上述示例中的每日格式
更新每月零件产量
2017 8 30630800.0000
2017 7 589076201.1800
简单地选作日期
SELECT CAST(fld_dateTime AS DATE) AS fld_Date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE
fld_ConsDateTime BETWEEN '2017-07-01' AND '2017-08-02'
GROUP BY CAST(fld_dateTime AS DATE);
编辑:
这个月怎么样?这是同样的逻辑吗 这取决于您的RDBMS,但在SQL Server中,您可以使用:
SELECT YEAR(fld_dateTime), MONTH(fld_dateTime), SUM(fld_Index) AS Sum
FROM tbl_data
GROUP BY YEAR(fld_dateTime), MONTH(fld_dateTime);
添加年份部分很重要,以避免将不同年份的记录分组。只需强制转换为日期即可
SELECT CAST(fld_dateTime AS DATE) AS fld_Date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE
fld_ConsDateTime BETWEEN '2017-07-01' AND '2017-08-02'
GROUP BY CAST(fld_dateTime AS DATE);
编辑:
这个月怎么样?这是同样的逻辑吗 这取决于您的RDBMS,但在SQL Server中,您可以使用:
SELECT YEAR(fld_dateTime), MONTH(fld_dateTime), SUM(fld_Index) AS Sum
FROM tbl_data
GROUP BY YEAR(fld_dateTime), MONTH(fld_dateTime);
添加年份部分很重要,以避免对不同年份的记录进行分组。您需要提取日期。在SQL Server中,您将执行以下操作:
SELECT CAST(fld_dateTime as DATE) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY CAST(fld_dateTime as DATE)
ORDER BY fld_date
SELECT DATE(fld_dateTime) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY DATE(fld_dateTime)
ORDER BY fld_date;
选择CAST(fld_dateTime作为日期)作为fld_日期,SUM(fld_索引)作为SUM
从tbl_数据
其中fld_ConsDateTime>='2017-07-01'和
fld_ConsDateTime<'2017-08-03'
按演员分组(fld_日期时间为日期)
按fld_日期订购
在MySQL中,上述方法可行,但我会:
SELECT CAST(fld_dateTime as DATE) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY CAST(fld_dateTime as DATE)
ORDER BY fld_date
SELECT DATE(fld_dateTime) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY DATE(fld_dateTime)
ORDER BY fld_date;
选择日期(fld_日期时间)作为fld_日期,选择总和(fld_索引)作为总和
从tbl_数据
其中fld_ConsDateTime>='2017-07-01'和
fld_ConsDateTime<'2017-08-03'
按日期分组(fld_日期时间)
按fld_日期订购;
在这两种情况下,您都应该更改
WHERE
子句。您的版本将保留日期/时间恰好为2017-08-02午夜的航班。使用=
和您需要提取日期。在SQL Server中,您将执行以下操作:
SELECT CAST(fld_dateTime as DATE) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY CAST(fld_dateTime as DATE)
ORDER BY fld_date
SELECT DATE(fld_dateTime) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY DATE(fld_dateTime)
ORDER BY fld_date;
选择CAST(fld_dateTime作为日期)作为fld_日期,SUM(fld_索引)作为SUM
从tbl_数据
其中fld_ConsDateTime>='2017-07-01'和
fld_ConsDateTime<'2017-08-03'
按演员分组(fld_日期时间为日期)
按fld_日期订购
在MySQL中,上述方法可行,但我会:
SELECT CAST(fld_dateTime as DATE) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY CAST(fld_dateTime as DATE)
ORDER BY fld_date
SELECT DATE(fld_dateTime) as fld_date, SUM(fld_Index) AS Sum
FROM tbl_data
WHERE fld_ConsDateTime >= '2017-07-01' AND
fld_ConsDateTime < '2017-08-03'
GROUP BY DATE(fld_dateTime)
ORDER BY fld_date;
选择日期(fld_日期时间)作为fld_日期,选择总和(fld_索引)作为总和
从tbl_数据
其中fld_ConsDateTime>='2017-07-01'和
fld_ConsDateTime<'2017-08-03'
按日期分组(fld_日期时间)
按fld_日期订购;
在这两种情况下,您都应该更改WHERE
子句。您的版本将保留日期/时间恰好为2017-08-02午夜的航班。我使用=
和删除了不兼容的数据库类型。请仅使用您真正使用的数据库进行标记。我删除了不兼容的数据库类型。请仅使用您真正使用的数据库进行标记。我将在派生表中进行转换,以完全符合ANSI SQL。下个月如何?这是相同的逻辑吗?@FreshPro这是相同的逻辑,使用函数在选择和分组依据部分中提取年和月部分。@FreshPro完成。@lad2025很抱歉,这是我的错误,在条件中不包括日期筛选器我将在派生表中执行强制转换部分,完全符合ANSI SQL标准。下个月怎么样?是相同的逻辑吗?@FreshPro逻辑相同,使用函数在选择和分组依据部分中提取年
和月
部分。@FreshPro完成。@lad2025抱歉这是我的错误,在where条件中不包括日期过滤器