SQL - 鲜明的一个山口,选择多个其他?(SQL - Distinct One Col, Sel

2019-10-16 20:13发布

我一直在试图低估写一个MS SQL 2005查询其几乎做以下的最佳途径......

select distinct col1, col2, col3
from table1

基本上,我想执行在col1不同的,但我不想对col2的/ 3 Dististinc,我只是想有值。

我理解它不可能这样写的查询,因为我觉得我读了鲜明的被应用到该行,而不是山坳?

任何人都可以请点我在正确的方向? 我曾尝试在但这没有工作权joing值追溯到我必须指定在不同的选择额外加入的cols这反过来执行这些鲜明的,即。

select distinct t1.col1, t2.col2, t3.col3
from table1 t1
right join (select col1, col2, col3 from table1) t2
on t1.col1 = t2.col1

编辑以更好地解释..

select distinct t1.Hostname, t2.IP, t2.ActionDateTime, t2.Action
from tblUserActions t1
right join (select Hostname, IP, ActionDateTime from tblUserActions) t2
on t1.Hostname = t2.Hostname

基本上,这表是成千上万的用户操作和IM试图名单上的主机名不同的列表,所以我应该只接收比如10行的那许多不同的主机名有怎么样了。 然后根据这些主机名我想也加入了最新的记录数据返回的行,所以我想回报:

  Hostname, IP, ActionDateTime, Action
1 Host1, 165.123.123.1, 2012-06-14 02:07:08, Logon
2 Host2, 165.123.123.2, 2012-06-14 03:07:08, Logoff
3 Host3, 165.123.123.3, 2012-06-14 04:07:08, Logon
4 Host4, 165.123.123.4, 2012-06-14 05:07:08, Logoff
etc...

任何帮助/指针将是巨大的! 干杯。

Answer 1:

通过它的声音,我认为这是你所追求的:

WITH CTE AS
(   SELECT  HostName,
            IP,
            ActionDate,
            Action,
            ROW_NUMBER() OVER(PARTITION BY HostName ORDER BY ActionDate DESC) AS RowNumber
    FROM    Table
)
SELECT  HostName,
        IP,
        ActionDate,
        Action
FROM    CTE
WHERE   RowNumber = 1

这将返回唯一的值主机名,那么返回的值的其他列是基于ORDER BY在第ROW_NUMBER()窗函数。

您可能需要改变ORDER BY自己的实际reqirements,我认为最新动作很可能是最有可能的。



Answer 2:

你只是想为每个主机名/ IP的最新行动?

你可以做这样的事情:

with latestAction as (
select  hostname,
        ip,
        max(ActionDate) as latestActionDate
from    tblUserActions
group by hostname,
        ip)
select  la.hostName,
    la.ip,
    tua.ActionDate,
    tua.Action
from    tblUserActions tua join latestAction la on
        tua.hostname = la.hostname and
        tua.ip = la.ip and
        tua.ActionDate = la.latestActionDate


文章来源: SQL - Distinct One Col, Select Multiple other?