Mysql 提供不同值的group by date子句

Mysql 提供不同值的group by date子句,mysql,sql,Mysql,Sql,我有3个表:user\u transaction、transaction和users 我正在尝试创建不同事务的摘要表 在每个日期的基础上 对于每位员工 对于每种资源 如下所示:(使用格式说明符筛选datetime-to-date) 选择 将(不同的(用户事务.trans\u id))计数为obj, 日期\u格式(日期,%Y-%m-%d')作为tdate 从…起 用户\事务,事务,用户 哪里 users.id=user\u transaction.user\u id 和users.employee

我有3个表:user\u transaction、transaction和users

我正在尝试创建不同事务的摘要表 在每个日期的基础上 对于每位员工 对于每种资源

如下所示:(使用格式说明符筛选datetime-to-date)

选择
将(不同的(用户事务.trans\u id))计数为obj,
日期\u格式(日期,%Y-%m-%d')作为tdate
从…起
用户\事务,事务,用户
哪里
users.id=user\u transaction.user\u id
和users.employeeid='samuel'
和用户\u transaction.trans\u id=transaction.id
和资源\u id=1和事务文本,如“%”
和日期格式(用户事务。日期,%Y-%m-%d)
在“2011-08-30”和“2011-11-28”之间
分组
日期\u格式(用户\u transaction.DATE,%Y-%m-%d')
上述查询的结果是,我在范围内的每个日期获得用户“samuel”的不同事务计数

e、 g.2011-08-30………..22; 2011-09-01............431; 2011-09-03............64 ; 等等

现在我将所有这些值相加,得到一个类似于用户总数的计数:1486

如果我在没有“分组依据日期”字段的情况下进行直接计数,则此计数与针对同一用户和日期范围的已修改查询不匹配。 i、 e.如果我在不进行日期分组的情况下运行以下查询:

select 
  count(distinct(user_transaction.trans_id)) as obj, 
from 
  user_transaction, transaction,users 
where 
  users.id = user_transaction.user_id and users.employeeid = 'samuel' 
  and user_transaction.trans_id=transaction.id  
  and resource_id =1 and transactiontext like '%<-->%' 
  and DATE_FORMAT(user_transaction.date,'%Y-%m-%d') 
    between '2011-08-30' and '2011-11-28'
选择
将(不同的(用户事务.trans\u id))计数为obj,
从…起
用户\事务,事务,用户
哪里
users.id=user\u transaction.user\u id和users.employeeid='samuel'
和用户\u transaction.trans\u id=transaction.id
和资源\u id=1和事务文本,如“%”
和日期格式(用户事务。日期,%Y-%m-%d)
在“2011-08-30”和“2011-11-28”之间
这给了我一个像1452这样的数字, 对每个用户来说,通过日期分组并求和得到总数的范围内的计数通常更多,但不确定原因

我需要为我的汇总表计算每个日期的计数

不使用group by子句直接获得的计数是正确的,请在表中进行检查


在group by子句中,我到底做错了什么?

由于您正在计算不同的值,并按日期分组,因此您可能在多天内拥有相同的trans\id,因此,在查询中使用group by比不使用group by的计数要大。

据我所知,trans_id即事务id是唯一的主键,即使对于同一用户,也不能在两个不同的日期重复。我假设主键实际上是事务表上的transaction.id。即使这是事务表的主键,但这并不意味着用户\u事务表中没有重复的匹配项,如果我的假设是反向的,也不意味着用户\u事务表中没有重复的匹配项。这是有道理的,理想情况下,表中记录的每个事务都需要具有唯一的事务id,该id是用户\u事务表中的外键,但正如您所说,如果表中出于某种原因存在trans_id的重复项,则会出现这种不一致性。我将重新加载我的生产数据库的一个样本,以确保数据是正确的,并对此进行测试。谢谢你的帮助
select 
  count(distinct(user_transaction.trans_id)) as obj, 
from 
  user_transaction, transaction,users 
where 
  users.id = user_transaction.user_id and users.employeeid = 'samuel' 
  and user_transaction.trans_id=transaction.id  
  and resource_id =1 and transactiontext like '%<-->%' 
  and DATE_FORMAT(user_transaction.date,'%Y-%m-%d') 
    between '2011-08-30' and '2011-11-28'