2014-01-24 125 views
0

我從表格中拉出兩列以返回具有當前日期日期但僅包含當前日期的特定行。例如,說鉛筆的日期是1/22/2014和2/22/2014。我不希望顯示它,因爲它有兩行具有唯一日期。但是,在使用count(*)> 1來獲取這些唯一行後,我無法計算唯一行的數量。我試着對這個物品進行計數,然後檢查這個物品(因此如果它只有一行,它會顯示),哪個「有效」,但是然後檢查了其他不起作用的值。在對唯一行進行計數後對唯一值進行計數?

use db 
    select todate, item 
    from table 
    group by todate, item 
    having count(*)>1 
    and cast(todate as date) = '2015-1-17' 
    and count(item)=1 
    order by item 

據我所知,這應該工作,不是嗎?我的猜測是問題出在count(item)和它的'計數所有非唯一行而不是唯一行,但我不知道如何解決這個問題。無論如何只計算唯一的行嗎?

對於這個表,

todate  item  
2015-01-17 pencil 
2015-01-17 pencil 
2014-02-22 pencil 
2015-01-17 pen 
2015-01-17  pen 
2015-01-17 eraser 

那麼它應該返回

todate   item 
2015-01-17  pen 
2015-01-17  eraser 

,因爲那些只能有唯一的日期。它不會返回鉛筆,因爲它有不止一個唯一的日期。

+0

請提供樣本數據和期望的輸出。 – RedFilter

回答

0

這兩個查詢都應該工作。你可以看到哪一個對你更好。 注意:如果todate列已經是日期數據類型,或者是時間總是午夜的日期時間,那麼不要將其作爲日期進行投射,並且由於不需要轉換數據類型,因此性能會更好。

select item, min(cast(todate as date)) as todate 
from table 
group by item 
having min(cast(todate as date)) = '2015-1-17' --if you are wanting to filter for one date only 
and min(cast(todate as date)) = max(cast(todate as date)) --all records have the same date 
order by item 
; 

select item, min(cast(todate as date)) as todate 
from table 
group by item 
having min(cast(todate as date)) = '2015-1-17' --if you are wanting to filter for one date only 
and count(distinct cast(todate as date)) = 1 --this item has only one distinct date 
order by item 
; 
+0

非常感謝!所以我的問題是,我應該一直試圖計算不同的東西,而不是項目? – PointXIV

+0

有幾個問題。 1)你是通過todate進行分組的,2)你只檢查至少有2條記錄的計數(*)> 1的項目,所以如果你的數據示例不會顯示橡皮擦,3)你正在計算行數對於計數(項目)> 1的項目具有非空值 – BateTech

相關問題