我试图在不选择LastUpdatedOn部分的最大值的情况下运行查询。它有效。但我不确定如何从特定项目Id的文档、说明、问题中选择LastUpdatedOn的最大值。
SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login],
(
SELECT MAX(LastUpdatedOn) AS max_LastUpdatedOn
FROM
(
SELECT {Question}.[LastUpdatedOn]
UNION ALL
SELECT {Document}.[LastUpdatedOn]
UNION ALL
SELECT {Instruction}.[LastUpdatedOn]
) A
)[max_LastUpdatedOn]
From {Project}
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId]
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId)
INNER JOIN {Document} ON {Project}.[Id] = {Document}.[ProjectId]
INNER JOIN {Instruction} ON {Project}.[Id] = {Instruction}.[ProjectId]
INNER JOIN {Question} ON {Project}.[Id] = {Question}.[ProjectId]
GROUP BY {Project}.[Number],
{Project}.[Name],
{User}.[Last_Login],
ORDER BY {Project}.[Number]
我收到以下错误"PORTAL.OSUSR_E2R_QUESTIONS_T9.LASTUPDATEDON"列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
好的,你只需要选择一个日期(最近的)吗?还是您需要选择三个日期(每个日期中最近的一个)?我认为,如果你只需要最近的日期(只有一个日期),你可以使用查询。
让我给你举个例子(我不知道如何在这里画一张表,所以……要耐心):
项目表:
Id:1
编号:1
名称:One_Poy
项目参与者表:
项目ID:1
用户ID:1
用户表:
Id:1
用户名:lmessi
LasLogIn:有朝一日
问题表:
项目ID:1
上次更新时间:昨天
文档表:
项目ID:1
上次更新时间:上周
指令表:
项目ID:1
上次更新时间:今日
查询将返回:
编号:1
名称:One_Poy
LAST_LOGIN:总有一天
MAX(LASTUPDATEON):今天的
我认为应该将您的查询拆分为每个"LastUpdateOn"的3个子查询。所以你先拿:{项目}。[编号],{项目}。[名称],{用户}。[Last_Login],{Document}。[上次更新时间]
第二:{项目}。[编号],{项目}。[名称],{用户}。[Last_Login],{指令}。[上次更新时间]
完成时间:{项目}。[编号],{项目}。[名称],{用户}。[Last_Login],{问题}。[上次更新时间]
现在你可以做:
SELECT RESULT.NUMBER, RESULT.NAME, RESULT.LAST_LOGIN, MAX(RESULT.LASTUPDATEON)
FROM (SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Question}.[LastUpdateOn] AS LastUpdateOn
FROM {Project}
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId]
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId)
INNER JOIN {Question} ON {Project}.[Id] = {Question}.[ProjectId]
UNION
SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Document}.[LastUpdateOn] AS LastUpdateOn
FROM {Project}
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId]
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId)
INNER JOIN {Document} ON {Project}.[Id] = {Document}.[ProjectId]
UNION
SELECT {Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Instruction}.[LastUpdateOn] AS LastUpdateOn
FROM {Project}
INNER JOIN {ProjectParticipant} ON {Project}.[Id] = {ProjectParticipant}.[ProjectId]
INNER JOIN {User} ON ({ProjectParticipant}.[UserId] = {User}.[Id] AND {User}.[Username] = @UserId)
INNER JOIN {Instruction} ON {Project}.[Id] = {Instruction}.[ProjectId]) AS RESULT
GROUP BY RESULT.NUMBER, RESULT.NAME, RESULT.LAST_LOGIN
ORDER BY RESULT.NUMBER
我认为它应该起作用。