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
Php 按日期时间SQL的日期分组_Php_Sql - Fatal编程技术网

Php 按日期时间SQL的日期分组

Php 按日期时间SQL的日期分组,php,sql,Php,Sql,我正在用PHP做一份销售报告。交易日期和时间位于列LastUpdateTime上,格式为:m-d-Y H:i:s。现在我想做一周的报告,所以我需要一天内所有交易的总额,所以我使用day的LastUpdateTime的group byday。这是我的代码,但它不起作用: <?php include 'report/go.php'; //DB connect $today =time();

我正在用PHP做一份销售报告。交易日期和时间位于列
LastUpdateTime
上,格式为:
m-d-Y H:i:s
。现在我想做一周的报告,所以我需要一天内所有交易的总额,所以我使用
day
LastUpdateTime
的group by
day
。这是我的代码,但它不起作用:

<?php
include 'report/go.php'; //DB connect
                                    $today =time();
                                    $from_time = date('d-m-Y', strtotime('last Monday'));
                                    $to_time = date('d-m-Y', strtotime('next Monday - 1 MIN'));
    $sql = "SELECT 
            SUM(TotalAmount) AS TotalPerDay , LastUpdateTime, DATEPART(dd,LastUpdateTime)
            FROM Tickets
            WHERE LastUpdateTime BETWEEN '$from_time' and '$to_time'
            GROUP BY DATEPART(dd,LastUpdateTime)
            ";
    $stmt = sqlsrv_query( $conn, $sql );
        if( $stmt === false) 
            {
                die( print_r( sqlsrv_errors(), true) );
            }
        while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) 
            {
                $money = $row['TotalPerDay'];
                $date = date_format($row['LastUpdateTime'], "d-m-Y");
                echo $money." - ".$date."<br>";
            }
?>

返回的错误:

列“Tickets.LastUpdateTime”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

请帮助:)非常感谢:)

您可以使用

SELECT      SUM(TotalAmount) AS TotalPerDay , DATEPART(dd,LastUpdateTime)
FROM        Tickets
WHERE       LastUpdateTime BETWEEN '$from_time' and '$to_time'
GROUP BY    DATEPART(dd,LastUpdateTime)

因为您不能在“按选择分组”中选择列/计算结果 语句,如果它不是group by子句的一部分

如果您希望执行查询,下面的链接可能会对您有所帮助

您可以使用

SELECT      SUM(TotalAmount) AS TotalPerDay , DATEPART(dd,LastUpdateTime)
FROM        Tickets
WHERE       LastUpdateTime BETWEEN '$from_time' and '$to_time'
GROUP BY    DATEPART(dd,LastUpdateTime)

因为您不能在“按选择分组”中选择列/计算结果 语句,如果它不是group by子句的一部分

如果您希望执行查询,下面的链接可能会对您有所帮助


所以您在select查询中使用了
lastUpdateTime
DATEPART(dd,lastUpdateTime)
,这两种方法是不同的。因此,对于超过1个
lastUpdateTime
,您可以使用相同的
DATEPART(dd,lastUpdateTime)
。因此,如果您按
DATEPART(dd,LastUpdateTime)
进行分组,那么您的数据库将不知道应该返回哪个
LastUpdateTime

因此,在select查询中使用
max(lastUpdateTime)
或任何其他聚合函数

SELECT 
        SUM(TotalAmount) AS TotalPerDay 
        ,max(LastUpdateTime)
        ,DATEPART(dd,LastUpdateTime)
        FROM Tickets
        WHERE LastUpdateTime BETWEEN '$from_time' and '$to_time'
        GROUP BY DATEPART(dd,LastUpdateTime),
        LastUpdateTime 

或者将
lastUpdateTime
添加到group by子句中,但它不会给您预期的结果。

因此您在select查询中使用
lastUpdateTime
DATEPART(dd,lastUpdateTime)
,这两种方法不同。因此,对于超过1个
lastUpdateTime
,您可以使用相同的
DATEPART(dd,lastUpdateTime)
。因此,如果您按
DATEPART(dd,LastUpdateTime)
进行分组,那么您的数据库将不知道应该返回哪个
LastUpdateTime

因此,在select查询中使用
max(lastUpdateTime)
或任何其他聚合函数

SELECT 
        SUM(TotalAmount) AS TotalPerDay 
        ,max(LastUpdateTime)
        ,DATEPART(dd,LastUpdateTime)
        FROM Tickets
        WHERE LastUpdateTime BETWEEN '$from_time' and '$to_time'
        GROUP BY DATEPART(dd,LastUpdateTime),
        LastUpdateTime 

或者将
lastUpdateTime
添加到GROUPBY子句中,但它不会给您预期的结果。

谢谢大家,我找到了我的解决方案

选择
总和(TotalAmount)为TotalPerDay,转换(VARCHAR(10),LastUpdateTime,103)为TicketDateTime
从票上
其中LastUpdateTime介于“$from_time”和“$to_time”之间
按转换分组(VARCHAR(10),LastUpdateTime,103)

我使用了
CONVERT
而不是
DATEPART
,然后我仍然有销售日期,并且仍然能够
根据
总额进行分组


非常感谢大家

谢谢大家,我找到了我的解决方案

选择
总和(TotalAmount)为TotalPerDay,转换(VARCHAR(10),LastUpdateTime,103)为TicketDateTime
从票上
其中LastUpdateTime介于“$from_time”和“$to_time”之间
按转换分组(VARCHAR(10),LastUpdateTime,103)

我使用了
CONVERT
而不是
DATEPART
,然后我仍然有销售日期,并且仍然能够
根据
总额进行分组


非常感谢大家

LastUpdateTime
放在
分组依据中
?它要么必须在聚合函数中,例如
SUM/count/min/max
,要么在
分组依据中
我只想按上次更新的日期分组。因为我每天都在寻找总收入。如果我只想让他们按天计算总收入,我应该如何把它放在
group by
中?在
SELECT
列表中包含
LastUpdateTime
是没有意义的,因为很多次都会映射到同一天。所以我认为你应该删除它。把
LastUpdateTime
放在
groupby
中?它要么是一个聚合函数,例如
SUM/count/min/max
,要么是
groupby
我只想按上次更新的日期分组。因为我每天都在寻找总收入。如果我只想让他们按天计算总收入,我应该如何把它放在
group by
中?在
SELECT
列表中包含
LastUpdateTime
是没有意义的,因为很多次都会映射到同一天。所以我想你应该把它移除。谢谢,但是你的两个解决方案都不起作用。出现另一个错误:
将varchar数据类型转换为datetime数据类型导致值超出范围
,因此似乎
LastUpdateTime
列数据类型为varchar。。是吗?谢谢,但你的两个解决方案都不起作用。出现另一个错误:
将varchar数据类型转换为datetime数据类型导致值超出范围
,因此似乎
LastUpdateTime
列数据类型为varchar。。正确的??