[英]Only run SQL Query if there are multiple rows
我有一個類似於下面的表-OrderStatusId是表上的PK。 StatusId是引用表的FK,其中包含所有可能的狀態。 CustomerId是Customer Details表的FK
OrderStatusId StatusId CustomerId DateModified
1 1 1 05/09/2017
2 1 1 06/09/2017
3 2 1 07/09/2017
4 1 2 07/09/2017
我想做的是在下面運行此查詢,以為該客戶選擇狀態ID = 1的最新修改日期。但是,我只想在該狀態ID等於1的計數大於1的情況下運行此查詢顧客。 因此,在上面的示例表中,我希望CustomerId 1返回06/09/2017,但CustomerId 2不返回任何內容。我嘗試了Haveing count(*)> 1子句,但無法使其正常工作。
SELECT TOP(1) os.DateModified AS LastModifiedDateForm
FROM [myTable].[OrderStatus] os WHERE os.CustomerId = 1 AND os.StatusID = 1
ORDER BY os.DateModified DESC
您可以使用MAX代替前1名嗎? 還是要返回更多列?
SELECT MAX(os.DateModified) AS LastModifiedDateForm
FROM [myTable].[OrderStatus] os
WHERE os.CustomerId = 1
AND os.StatusID = 1
GROUP BY CustomerId,
StatusId
HAVING COUNT(*) > 1
也許只有每個客戶有多個約會,您才會超過每個客戶的最長約會?
select max(os.DateModified) AS LastModifiedDateForm
from [myTable].[OrderStatus] os
group by os.CustomerId
having count(1) > 1
在當前情況下,這只會為您提供ID為1的客戶的數據,或者為其他一些樣本數據提供具有多於1行的其他所有客戶ID。
使用ROW_NUMBER()
另一種方法
with firstonly as (
select CustomerId, DateModified, ROW_NUMBER() over (partiton by CustomerId order by DateModified desc) rownumDesc, ROW_NUMBER() over (partiton by CustomerId order by DateModified) rownumAsc
FROM [myTable].[OrderStatus] os WHERE os.CustomerId = 1 AND os.StatusID = 1
)
select *
from firstonly
where rownumDesc = 1
and rownumAsc != 1
;
一次為所有客戶工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.