SELECT DISTINCT SELECT其他列

时间:2019-03-19 21:18:23

标签: sql sql-server tsql

我有一个查询,用于获取有关数据库的系统数据

$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"

例如,如果表具有:

table

导出的csv仅应包含:

desired table

2 个答案:

答案 0 :(得分:3)

评论太多了。

此查询将过滤出 all 值相同的所有行:

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

如果 any 列的值不同,您将获得两个(或更多)记录。

编辑

另一方面,如果您只希望每个sessionID有一条记录,则此查询将仅返回该记录。 ROW_NUMBER()中的ORDER BY需要一个内部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添加到排序条件。

答案 1 :(得分:3)

您可以使用类似的查询:

ArrayList<String[]> songsArray = new ArrayList<String[]>();
Scanner scan = new Scanner(new File("test.csv"));
while (scan.hasNextLine()) {
    String line = scan.nextLine();
    String[] lineArray = line.split(",");
    songsArray.add(lineArray);
}

OR

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