Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL GROUP BY从每小时数据到每日数据_Sql_Group By - Fatal编程技术网

使用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条件中不包括日期过滤器