簡體   English   中英

SELECT DISTINCT SELECT其他列

[英]SELECT DISTINCT SELECT other columns

我有一個查詢,可獲取有關數據庫的系統數據

$data = Query "SELECT [server_name]
      ,[sessionID]
      ,[user]
      ,[ElapsedTime]
from table"
$data | Export-Csv -Path $Path\data.csv -NoTypeInformation

最近,我注意到導出的數據中有sessionID的重復條目。 是否可以選擇僅按會話ID區分?

就像是

Query "SELECT [server_name]
      ,SELECT DISTINCT[sessionID]
      ,SELECT [user]
      ,[ElapsedTime]
from table"

例如,如果表具有:

表

導出的csv僅應包含:

所需表

評論太多了。

此查詢將過濾所有值均相同的所有行:

$data = Query "SELECT DISTINCT [server_name]
      ,[sessionID]
      ,[user]
      ,[ElapsedTime]
from table"
$data | Export-Csv -Path $Path\data.csv -NoTypeInformation

如果任何列的值不同,您將獲得兩個(或更多)記錄。

編輯

另一方面,如果您只希望每個sessionID一個記錄,則此查詢將僅返回該記錄。 ORDER BYROW_NUMBER()需要一個內部ORDER BY子句,但這聽起來好像您並不在乎它的排序方式,因此從本質上講,這是一種隨機排序,可減少到一行。

$data = Query "SELECT TOP (1) WITH TIES [server_name]
      ,[sessionID]
      ,[user]
      ,[ElapsedTime]
from table
ORDER BY ROW_NUMBER() OVER (PARTITION BY sessionID ORDER BY update_time DESC) "
$data | Export-Csv -Path $Path\data.csv -NoTypeInformation

第二編輯 :將update_time添加到排序條件。

您可以使用類似的查詢:

SELECT * FROM (SELECT [server_name]
      ,[sessionID]
      ,[user]
      ,[ElapsedTime]
      ,ROW_NUMBER() OVER(PARITION BY sessionID ORDER BY sessionID) rn
from table) T WHERE rn = 1

要么

WITH CTE_1 AS(SELECT [server_name]
          ,[sessionID]
          ,[user]
          ,[ElapsedTime]
          ,ROW_NUMBER() OVER(PARITION BY sessionID ORDER BY sessionID) rn
    from table) SELECT * FROM CTE_1 WHERE rn = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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