SELECT DISTINCT SELECT другие столбцы - PullRequest
2 голосов
/ 20 марта 2019

У меня есть запрос, который выбирает системные данные о базе данных

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

Недавно я заметил, что в экспортированных данных есть повторяющиеся записи для sessionID. Есть ли возможность выбрать отличные только по идентификатору сеанса?

Что-то вроде

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

Например, если таблица имеет:

table

Экспортированный CSV должен содержать только:

desired table

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Вы можете использовать похожий запрос:

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
3 голосов
/ 20 марта 2019

Слишком много для комментария.

Этот запрос отфильтрует все строки, в которых все значений совпадают:

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

Если любой столбец имеет другое значение, вы получите две (или более) записи.

EDIT

С другой стороны, если вам нужна только одна запись на 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

2-е РЕДАКТИРОВАНИЕ : добавлен update_time к критериям сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...