2011-11-29 21 views
3

我有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

因爲你是計數不同的值和按日期分組,有可能是您擁有多個日子一樣TRANS_ID,從而使你在查詢一個更大的計數與組比,沒有。

+0

現在我知道它trans_id即交易ID是一個獨特的主鍵,即使對同一個用戶不能重複2個不同的日期。 –

+0

我假設主鍵實際上是事務表上的transaction.id。即使這是事務表的主鍵,並不意味着user_transaction表中沒有重複的匹配項,反之亦然,如果我的假設是反向的。 – ChandlerPelhams

+0

它是有道理的,理想情況下,表中記錄的每個事務都需要具有一個唯一的事務ID,它是user_transaction表中的外鍵,但正如您所說,如果由於某種原因在表中存在trans_id的重複項,則會產生此不一致。我將重新加載生產數據庫的樣本,以確保數據正確並對此進行測試。感謝您的幫助 –