查询以获取所有不同的行,添加一个列来指示每个重复项的总和

Query to get all distinct lines adding a column indicating a sum of each duplicate

我在找什么:

我需要从 SQL 服务器获取所有 ID 的列表,但每个 ID 都有多行。 每个 ID 中的一些行是系统更新,因此在我的查询中不需要关心它们。

换句话说:

我需要获取整个列表,为每个 ID 计算所有不是来自系统的行。

数据库如下所示:

ID | linenumber| data, data, ... data|Requesto| data, data

1  | 1         |.....................|JUAN    |...........
1  | 2         |.....................|SYSTEM  |...........
2  | 1         |.....................|Matias  |...........
2  | 2         |.....................|Matias  |...........
2  | 3         |.....................|Matias  |...........

我需要得到:

ID | CantRoWs  |.....................|WHO is  |...........

1  | 1         |.....................|JUAN    |...........
2  | 3         |.....................|Matias  |...........

我正在考虑使用如下所示的临时查询,但它不起作用。

with temp as
    (
      SELECT OVER (PARTITION BY szCID ORDER BY gdReceived desc) as RowNum,*
      FROM TABLE1;
    )
    SELECT *, (Select count(szCID) from TABLE1 where szAccount <> 'system') AS Hits From temp 
    WHERE RowNum = 1

有什么想法吗?

我建议您首先在通用 table 表达式中使用 row_number() 和 count():

WITH temp
AS (
    SELECT
        *
      , ROW_NUMBER() OVER (PARTITION BY szCID ORDER BY gdReceived DESC) AS RowNum
      , COUNT(*) OVER (PARTITION BY szCID) as hits
    FROM TABLE1
    WHERE szAccount <> 'system'
)
SELECT
    *
FROM temp
WHERE RowNum = 1