【问题标题】:The DATEDIFF function return 2 rowDATEDIFF 函数返回 2 行
【发布时间】:2020-06-20 03:13:15
【问题描述】:

我有正常工作的查询,我得到以下输出:

9   1116    JOHN    0590056093  9106809105      3   A       NULL    D
9   1117    SARA    0015562451  9203410410      3   A       NULL    D
9   1118    DAVID   5560101753  9375115360      3   B       NULL    D

添加datediff 列后,我的输出如下

9   1116    JOHN    0590056093  9106809105      3   A       NULL    D    10
9   1116    JOHN    0590056093  9106809105      3   A       NULL    D    1
9   1117    SARA    0015562451  9203410410      3   A       NULL    D    10
9   1117    SARA    0015562451  9203410410      3   A       NULL    D    1
9   1118    DAVID   5560101753  9375115360      3   B       NULL    D    10
9   1118    DAVID   5560101753  9375115360      3   B       NULL    D    1

datediff 列中显示 1 的原因是什么?

查询:

select distinct t1.*, fs.Name+' '+ed.Academic as takhasos, Articles.Title, MT.Name as paye,
datediff(m,Projects.StartDateProject, Projects.EndDateProject) as datedif 
from 
(select RC.ID, RCU.UserID, u.Name + ' ' + u.Family AS NameFamily, u.UserName, u.Mobile, u.Email, groupED.IdMaghtae
    from ResearchersCores AS RC LEFT OUTER JOIN
ResearchersCoreUsers AS RCU ON RC.ID = RCU.ResearchersCoreID LEFT OUTER JOIN
Users AS u ON u.Id = RCU.UserID LEFT OUTER JOIN 
(SELECT Eductionals.UserID , Max(Eductionals.MaghtaeID) AS IdMaghtae
    FROM Eductionals
    GROUP BY Eductionals.UserID) groupED
    ON u.Id = groupED.UserID 
WHERE        (RC.IsEnable = 1) AND (RCU.isEnable = 1) AND (RCU.RoleID = 5) ) t1 left outer join
Eductionals as ED ON ED.UserID = t1.UserID AND t1.IdMaghtae = ed.MaghtaeID left outer join
FieldStudies as FS ON ed.FieldStudy_ID = FS.ID left outer join
Articles ON Articles.UserID = t1.UserID left outer join
Projects ON Projects.RecordID = t1.ID and Projects.ControllerID = 8 left outer join
MaghtaeTahsilis MT On MT.ID = t1.IdMaghtae
where t1.id = 9

我想要以下输出

9   1116    JOHN    0590056093  9106809105      3   A       NULL    D    10
9   1117    SARA    0015562451  9203410410      3   A       NULL    D    10
9   1118    DAVID   5560101753  9375115360      3   B       NULL    D    10

【问题讨论】:

    标签: sql sql-server tsql distinct datediff


    【解决方案1】:

    您的查询使用distinct 删除重复行。但是您添加的表达式在这些否则重复的行上具有不同的值,因此它们现在显示在结果集中。

    一种选择是改用group by,并采用datediff 的max()。这要求您在group by 子句中重复select 子句中的所有其他列:

    select 
        t1.col1,
        t1.col2,
        ..., 
        max(datediff(m,Projects.StartDateProject, Projects.EndDateProject)) as datedif 
    from ...
    where t1.id = 9
    group by t1.col1, t1.col2, ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多