【发布时间】:2012-06-14 10:22:34
【问题描述】:
我一直试图低估编写 MS SQL 2005 查询的最佳方法,该查询几乎可以执行以下操作...
select distinct col1, col2, col3
from table1
基本上我想在 col1 上执行 Distinct,但我不想在 Col2/3 上执行 Dististinc,我只想要那里的值。
我知道它不可能以这种方式编写查询,因为我认为我读到 Distinct 应用于行而不是 col?
谁能指出我正确的方向?我确实尝试将值重新加入,但这不起作用,因为我必须在不同的选择中指定额外加入的列,这反过来又在这些上执行不同的,即。
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
基本上,这个表是数千个用户操作的列表,我试图在主机名上列出不同的列表,所以我应该只收到 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...
任何帮助/指针都会很棒!干杯。
【问题讨论】:
-
如果我理解正确,您只想从 col1 中选择不同的值,但您想要 col2 和 col3 中的所有值?当 col1 具有相同的值时,您想在其位置显示什么?您必须在结果集的 col1 中显示一些值(即使它为空)。
-
你能给我们一些示例数据吗?我不确定我是否完全理解你在追求什么
-
这是不可能的。在纸上尝试 - 为 col1 写一列具有相同值的列,并在其旁边为 col2 写一个具有不同值的列。你要取 col2 的哪个值?如果你想要所有这些,你不能只取 col1 中的一个。你需要这个做什么?
-
如果你有两行
(1, a, x)和(1, b, y),你想要什么结果?你可以让col1, MAX(col2), MIN(col3)给(1, b, x),但你并没有真正解释你想要什么。你能给出一些示例输入数据和一些示例输出数据吗? -
很抱歉最初的垃圾解释,我已经更新了我原来的帖子以表明我的意思:)
标签: sql sql-server-2005 distinct