T-SQL 收集相同的数字
T-SQL gather same numbers
嘿,我需要在我的 SQL Server 2016 数据库中合并类似的数字。
我的table结构:
--------------------------------
|ID |number |lastModifiedDate |
--------------------------------
|124 |1 |Mar 27 2018 9:10AM
|124 |2 |Mar 27 2018 9:22AM
|124 |2 |Mar 27 2018 9:22AM
|124 |3 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:38AM
|124 |5 |Mar 27 2018 10:04AM
|124 |5 |Mar 27 2018 10:05AM
在上面的示例 table 中,我正在寻找看起来像这样的输出(请注意,它显示了最新的 date/time 它找到的许多相同数字的行):
|124 |1 |Mar 27 2018 9:10AM
|124 |2 |Mar 27 2018 9:22AM
|124 |3 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:38AM
|124 |5 |Mar 27 2018 10:05AM
在这里使用这个查询:
SELECT
id,
CONCAT(number, ' (', lastModifiedDate, ')') AS name
FROM
bLine
WHERE
LINK_userTblID = 1
AND
stage = 1
GROUP BY
number, id, lastModifiedDate
只输出与我上面的第一个 table 示例相同的数据... 我只能有 2 个输出列名称 - 即 ID 和名称 .
我试过在数字上使用 distinct,但这似乎不起作用。
帮助解决我的问题会很棒! :)
select id, number, max(lastmodifieddate)lastmodifieddate
from yourtable
group by id, number
order by number
如果你想要两个输出列并将时间戳附加到数字,你可以这样做:
;with cte AS (
SELECT id,
number,
MAX(lastmodifieddate) AS mod_date
FROM your_table
GROUP BY id, number
)
SELECT id,
CAST(number AS VARCHAR(10)) + ' ' + CAST(mod_date AS VARCHAR(50)) AS new_col
FROM cte
您只需将查询修改为:
SELECT id, CONCAT(number, ' (', MAX(lastModifiedDate), ')') AS name
FROM bLine
WHERE LINK_userTblID = 1 AND stage = 1
GROUP BY number, id;
重要的一点是 lastModifiedDate
不应该出现在 GROUP BY
子句中。相反,它应该是聚合函数的参数。
此外,您可能希望使用 CONVERT()
或 FORMAT()
将日期转换为字符串,而不是依赖默认参数。
还有一个选择
Select Top 1 with Ties
ID
,Name = CONCAT(number, ' (', lastModifiedDate, ')')
From bLine
Where LINK_userTblID = 1 and stage = 1
Order by Row_Number() over (Partition By ID,number Order by lastModifiedDate Desc)
Returns
ID Name
124 1 (Mar 27 2018 9:10AM)
124 2 (Mar 27 2018 9:22AM)
124 3 (Mar 27 2018 9:35AM)
124 4 (Mar 27 2018 9:38AM)
124 5 (Mar 27 2018 10:05AM)
Updated for comment
Select Top 1 with Ties
ID
,number
,lastModifiedDate
From bLine
Where LINK_userTblID = 1 and stage = 1
Order by Row_Number() over (Partition By ID,number Order by lastModifiedDate Desc)
嘿,我需要在我的 SQL Server 2016 数据库中合并类似的数字。
我的table结构:
--------------------------------
|ID |number |lastModifiedDate |
--------------------------------
|124 |1 |Mar 27 2018 9:10AM
|124 |2 |Mar 27 2018 9:22AM
|124 |2 |Mar 27 2018 9:22AM
|124 |3 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:38AM
|124 |5 |Mar 27 2018 10:04AM
|124 |5 |Mar 27 2018 10:05AM
在上面的示例 table 中,我正在寻找看起来像这样的输出(请注意,它显示了最新的 date/time 它找到的许多相同数字的行):
|124 |1 |Mar 27 2018 9:10AM
|124 |2 |Mar 27 2018 9:22AM
|124 |3 |Mar 27 2018 9:35AM
|124 |4 |Mar 27 2018 9:38AM
|124 |5 |Mar 27 2018 10:05AM
在这里使用这个查询:
SELECT
id,
CONCAT(number, ' (', lastModifiedDate, ')') AS name
FROM
bLine
WHERE
LINK_userTblID = 1
AND
stage = 1
GROUP BY
number, id, lastModifiedDate
只输出与我上面的第一个 table 示例相同的数据... 我只能有 2 个输出列名称 - 即 ID 和名称 .
我试过在数字上使用 distinct,但这似乎不起作用。
帮助解决我的问题会很棒! :)
select id, number, max(lastmodifieddate)lastmodifieddate
from yourtable
group by id, number
order by number
如果你想要两个输出列并将时间戳附加到数字,你可以这样做:
;with cte AS (
SELECT id,
number,
MAX(lastmodifieddate) AS mod_date
FROM your_table
GROUP BY id, number
)
SELECT id,
CAST(number AS VARCHAR(10)) + ' ' + CAST(mod_date AS VARCHAR(50)) AS new_col
FROM cte
您只需将查询修改为:
SELECT id, CONCAT(number, ' (', MAX(lastModifiedDate), ')') AS name
FROM bLine
WHERE LINK_userTblID = 1 AND stage = 1
GROUP BY number, id;
重要的一点是 lastModifiedDate
不应该出现在 GROUP BY
子句中。相反,它应该是聚合函数的参数。
此外,您可能希望使用 CONVERT()
或 FORMAT()
将日期转换为字符串,而不是依赖默认参数。
还有一个选择
Select Top 1 with Ties
ID
,Name = CONCAT(number, ' (', lastModifiedDate, ')')
From bLine
Where LINK_userTblID = 1 and stage = 1
Order by Row_Number() over (Partition By ID,number Order by lastModifiedDate Desc)
Returns
ID Name
124 1 (Mar 27 2018 9:10AM)
124 2 (Mar 27 2018 9:22AM)
124 3 (Mar 27 2018 9:35AM)
124 4 (Mar 27 2018 9:38AM)
124 5 (Mar 27 2018 10:05AM)
Updated for comment
Select Top 1 with Ties
ID
,number
,lastModifiedDate
From bLine
Where LINK_userTblID = 1 and stage = 1
Order by Row_Number() over (Partition By ID,number Order by lastModifiedDate Desc)