1

我尝试在不选择 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 子句中。

4

2 回答 2

1

好的,您只需要选择一个日期(最近的)吗?还是您需要选择三个日期(每个日期最近的日期)?我认为如果您只需要最近的日期(只有一个日期),您可以使用查询。

让我给你看一个例子(我不知道如何在这里绘制表格,所以..请耐心等待):

项目表:
ID:1
编号:1
名称:One_Proy

Project_participant 表:
ProjectID:1
UserID:1

用户表:
ID:1
用户名:lmessi
LasLogIn:某天

问题表:
ProjectId:1
LastUpdateOn:昨天

文档表:
ProjectId:1
LastUpdateOn: LastWeek

指令表:
ProjectId:1
LastUpdateOn:今天

查询将返回:
NUMBER: 1
NAME: One_Proy
LAST_LOGIN: Someday
MAX(LASTUPDATEON): Today

于 2015-06-30T18:13:30.807 回答
0

我认为应该将您的查询拆分为每个“LastUpdateOn”的 3 个子查询。所以你先拿:{Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Document}.[LastUpdatedOn]

第二:{Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Instruction}.[LastUpdatedOn]

完成:{Project}.[Number],{Project}.[Name],{User}.[Last_Login], {Question}.[LastUpdatedOn]

现在你可以这样做:

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

我认为它应该工作。

于 2015-06-29T13:41:02.907 回答