【发布时间】:2018-07-22 12:39:39
【问题描述】:
我正在尝试使用小于 4 的 sysAddress 来获取每个结果的第一个实例。但是我的语句目前在应用 where sysAddress
我应该以不同的方式嵌套它吗?我不想创建额外的表连接层。这可能吗?我对我找到的所有答案有点迷茫。
SELECT
tblHistoryObject.info,
tblHistory.actionTime,
tblHistoryUser.userID,
tblHistoryUser.firstName,
tblHistoryUser.surname,
tblHistory.eventID,
tblHistoryObject.objectID,
tblHistorySystem.sysAddress
FROM tblHistoryObject
JOIN tblHistory
ON (tblHistory.historyObjectID = tblHistoryObject.historyObjectID)
JOIN tblHistorySystem
ON (tblHistory.historySystemID = tblHistorySystem.historySystemID)
JOIN tblHistoryUser
ON (tblHistory.historyUserID = tblHistoryUser.historyUserID)
INNER JOIN (SELECT
MIN(actionTime) AS recent_date,
historyObjectID
FROM tblHistory
GROUP BY historyObjectID) AS t2
ON t2.historyObjectID = tblHistoryObject.historyObjectID
AND tblHistory.actionTime = t2.recent_date
WHERE sysAddress < 4
ORDER BY actionTime ASC
【问题讨论】:
-
看看SELECT (Transact-SQL),特别是关于逻辑处理的部分。您会注意到
WHERE是要处理的第四个逻辑部分,而ON和JOIN分别是第二个和第三个。如果您需要在JOIN之前执行当前位于WHERE中的内容,请将其移至ON子句中。 -
这个查询中
Join和Inner join有什么区别,并且没有aggergate,在select查询中,在这个实例中看不到分组的原因 -
@BHouse,GROUP BY 上方有 MIN 3 行。 (格式差的 SQL 更难阅读……)
-
建议您包含一些示例数据(输入和预期结果),以展示您正在处理的内容以及您想要完成的内容。
-
实际上很难告诉确切你想要什么,因为你没有给出任何实际的例子。所以我们不得不从你的描述中推断出它(不幸的是,描述性不是很好;一张图片值一千字,所以给我们展示一些示例数据和你想要的结果)。我的第一个推断是,您只希望
tblHistoryObject中每行的结果中有一行?
标签: sql sql-server select inner-join