Php 按日期时间SQL的日期分组
我正在用PHP做一份销售报告。交易日期和时间位于列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();
LastUpdateTime
上,格式为:m-d-Y H:i:s
。现在我想做一周的报告,所以我需要一天内所有交易的总额,所以我使用day
的LastUpdateTime
的group byday
。这是我的代码,但它不起作用:
<?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。。正确的??