簡體   English   中英

僅在有多行時運行SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM