查询以获取所有不同的行,添加一个列来指示每个重复项的总和
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
我在找什么:
我需要从 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