【问题标题】:Distinct Records Count Totals Group by Month按月分组的不同记录计数总计
【发布时间】:2012-07-29 17:49:45
【问题描述】:

我有一个用户表,我需要在其中生成报告并显示在给定年份每个月用户进入系统的次数。我创建了一个表,其中第一列返回不同的用户。接下来,在右侧,我想显示每个月用户输入了多少次。我目前的代码只计算每个月的总数,并将每个月的总数放入所有用户。在下面的案例中,它为每个用户列出了 5 月的 7 个、6 月的 13 个和 7 月的 12 个。但我希望它显示如下,按月细分。

Users    May    June    July  
User1     1       2       3     
User2     1       1       2  
User3     5       10      7   

<?php
$sql = "SELECT record,count(*) as TotalCount,

(select DISTINCT count(*) from Table1 WHERE datereceived BETWEEN '2012-05-01' AND '2012-05-31') as May,
(select DISTINCT count(*) from Table1 WHERE datereceived BETWEEN '2012-06-01' AND '2012-06-30') as June,
(select DISTINCT count(*) from Table1 WHERE datereceived BETWEEN '2012-07-01' AND '2012-07-31') as July
FROM Table1 GROUP BY record";
$params = array();
$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $conn, $sql ,  $params, $options );
if( $stmt === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) { 
?>  

<tr id="styling">
    <td class="style"><?php echo $row['record']; ?></td>
    <td class="style"><?php echo $row['May']; ?></td>
    <td class="style"><?php echo $row['June']; ?></td>
    <td class="style"><?php echo $row['July']; ?></td>
</tr>
<?php } ?>

【问题讨论】:

  • 你能展示一下你的表结构吗?

标签: php sql sql-server


【解决方案1】:

我认为最好按您的日期字段分组,而不是按您现在的使用方式。

select DISTINCT count(*) from Table1 GROUP BY EXTRACT(MONTH FROM datereceived)

但我看不到您使用哪个字段来识别用户。您也可以尝试在该字段上进行分组。

【讨论】:

  • 我正在使用记录字段来识别用户。表结构是输入用户记录时的日期时间字段,将当前日期写入该字段,用户名(记录)字段,然后是其他字段以获取信息。我正在尝试查看 datetime 字段(datereceived)并根据其日期将其分成不同的月份。
【解决方案2】:

你可以试试这个

select distinct fittname, datename(month,datereceived), count(*) from 用户按名字、日期名(月、收到日期)分组

【讨论】:

  • 这仅返回不同的用户名,但没有每个月的总数。
猜你喜欢
  • 2015-08-03
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2010-10-01
  • 2017-07-26
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多