从不同的表中选择字段的最大值



我试图在不选择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

我认为它应该起作用。

相关内容

  • 没有找到相关文章

最新更新