【发布时间】:2010-08-27 05:09:09
【问题描述】:
请注意,我是一个完整的 SQL 菜鸟,并且正在学习中。根据谷歌搜索(包括在此处搜索),我尝试使用 SELECT DISTINCT 和 GROUP BY 但两者都不起作用,可能是由于我所有的加入(如果有人知道他们为什么不能完全工作,那将有助于学习)。
我需要来自各种表格的数据,下面是我知道的唯一方法(我只知道基础知识)。下面的查询工作正常,但显示重复。我需要知道如何删除这些。我现在唯一的提示可能是嵌套的 SELECT 查询,但根据研究,我不确定如何实现它们。任何帮助都会很棒,谢谢!
USE SQL_Contest
go
SELECT
CLT.Description AS ClockType,
CLK.SerialNumber AS JobClockSerial,
SIT.SiteNumber AS JobID,
SIT.[Name] AS JobsiteName,
SIT.Status AS SiteActivityStatus,
DHA.IssuedDate AS DHAIssuedDate, -- Date the clock was assigned to THAT jobsite
CLK.CreatedDate AS CLKCreatedDate, -- Date clock first was assigned to ANY jobsite
SES.ClockVoltage
FROM tb_Clock CLK
INNER JOIN tb_ClockType CLT
ON CLK.TypeID = CLT.ClockTypeID
INNER JOIN tb_DeviceHolderActivity DHA
ON CLK.ClockGUID = DHA.DeviceGUID
INNER JOIN tb_Site SIT
ON SIT.SiteGUID = DHA.HolderGUID
LEFT JOIN tb_Session SES
ON SES.ClockSerialNumber = CLK.SerialNumber
WHERE DHA.ReturnedDate IS NULL
ORDER BY SIT.[Name] ASC
编辑:我将很快审查这些答案,非常感谢。我根据 Rob 的要求发布了额外的重复信息:
在我添加之前一切正常:
LEFT JOIN tb_Session SES
ON SES.ClockSerialNumber = CLK.SerialNumber
我需要的。那是出现重复的时候:
JobClock 2,500248E4,08-107,Brentwood Job,1,2007-05-04 13:36:54.000,2007-05-04 13:47:55.407,3049
JobClock 2,500248E4,08-107,Brentwood Job,1,2007-05-04 13:36:54.000,2007-05-04 13:47:55.407,3049
我希望该信息只显示一次。本质上,此查询是确定所有已分配时钟的活动作业现场,并且该作业仅分配了一个时钟,并且它只是一个作业现场,但它出现了两次。
编辑 2:根据你们提供的帮助,我能够确定它们实际上不是重复的,并且每个会话都是独立的,这是唯一一个碰巧有两个会话的会话。因此,现在我将尝试弄清楚如何仅从最新会话中提取信息。
【问题讨论】:
-
一些重复行的输出示例会很有帮助,因此我们可以看到 what's 被重复。答案几乎可以肯定涉及您未显示的列之一,在每个重复行中包含不同的值。
-
我添加了应该有用的信息,谢谢 Rob!
-
副本中是否有错字,因为
DISTINCT会删除它。作为“ses”上的 LEFT JOIN,我希望 ses.clockvoltage 为每一行显示不同的值。否则,这意味着您有多个相关的“ses”记录,并且需要查看您需要加入“ses”以消除重复项(如果可能)。 -
如果您可以决定 如何 确定哪个是相关会话,您可以在我提供的示例中将其添加为子查询中的
WHERE子句这应该会让你得到你想要的结果=) -
非常感谢罗伯!我试试看。
标签: sql