условие группировки по дате, дающее другое значение - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть 3 таблицы: user_transaction, транзакция и пользователи

Я пытаюсь создать сводную таблицу отдельных транзакций на каждую дату для каждого сотрудника за каждый ресурс

следующим образом: (фильтрация даты и времени с использованием спецификатора формата)

select 
  count(distinct(user_transaction.trans_id)) as obj, 
  DATE_FORMAT(DATE, '%Y-%m-%d') as tdate
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'
  group by 
    DATE_FORMAT(user_transaction.DATE, '%Y-%m-%d')

Результатом вышеупомянутого запроса является то, что я получаю различное количество транзакций для пользователя 'samuel' на каждую дату в диапазоне

например. 2011-08-30 ............ 22; 2011-09-01 ............ 431; 2011-09-03 ............ 64; и т.д ..

теперь я суммирую все эти значения и получаю для пользователя общее количество: 1486

Это количество не совпадает с моим измененным запросом для того же пользователя и диапазона дат, если я выполняю прямой подсчет без группировки по полю в поле Дата. то есть, если я выполню запрос ниже без группировки дат:

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'

Это дает мне счет как 1452, подсчет диапазона с группировкой дат и суммированием для получения итогового значения обычно больше для каждого пользователя, не знаю почему.

Мне нужно рассчитать число для каждой даты в моей сводной таблице.

Счет, который я получаю напрямую, без использования предложения group by, правильный, проверил его в таблице.

Что именно я делаю неправильно в предложении group by?

1 Ответ

1 голос
/ 29 ноября 2011

Так как вы подсчитываете различные значения и группируете по дате, может быть возможно, что у вас будет один и тот же trans_id в течение нескольких дней, что даст вам большее число в запросе с группой, чем без них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...