Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何在选择多个记录时仅选择最新记录_Sql_Sql Server - Fatal编程技术网

SQL:如何在选择多个记录时仅选择最新记录

SQL:如何在选择多个记录时仅选择最新记录,sql,sql-server,Sql,Sql Server,因此,我想将这个“返回”的结果集转换为它下面的结果集,创建日期是最年轻(最新)的,表示最近添加的内容 PhoneNum sourcetable FullName reference Task CreatedDate 0 This is not important Mr john smith 39161 This is different every

因此,我想将这个“返回”的结果集转换为它下面的结果集,创建日期是最年轻(最新)的,表示最近添加的内容

PhoneNum    sourcetable      FullName         reference        Task                                         CreatedDate
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  16/03/2015 15:01:05
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  12/03/2015 16:58:22
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  12/03/2015 16:58:25
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  10/03/2015 12:29:50
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  12/03/2015 14:18:47
    0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  10/03/2015 12:40:21
    1   This is not important   Mr wilson smith 39158   This is different every time, but has been renamed  10/03/2015 12:07:14
    1   This is not important   Mr wilson smith 39158   This is different every time, but has been renamed  10/03/2015 12:07:14
    1   This is not important   Mr wilson smith 39158   This is different every time, but has been renamed  10/03/2015 12:07:13
我需要返回的内容:

PhoneNum    sourcetable     FullName       reference      Task                                           CreatedDate
0   This is not important   Mr john smith   39161   This is different every time, but has been renamed  12/03/2015 16:58:25
1   This is not important   Mr wilson smith 39158   This is different every time, but has been renamed  10/03/2015 12:07:14
到目前为止我所拥有的

select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,t.Subject,t.CreatedDate 
from Dial d
join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
where c.FK_ClientID in (39157,39160)
如有任何帮助,将不胜感激。

在末尾添加“order by”以获取订单,并首先添加“desc”

ORDER BY t.CreatedDate DESC
将GROUPBY添加到末尾

在select之后添加“top”,以限制返回的记录数

SELECT TOP 1 ...

好的,再试一次

SELECT 
    person.PhoneNum,
    person.sourcetable,
    person.FullName,
    person.ref,

    t.Subject,t.CreatedDate 

FROM Database.dbo.Tasks t
JOIN (
    SELECT d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref
    FROM Dial d
    JOIN Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
    JOIN Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
    JOIN Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
    JOIN Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID

    WHERE c.FK_ClientID in (39157,39160)

) person ON T.FK_ApplicationID = person.ref

ORDER BY t.CreatedDate DESC
在这里,我通过“最新优先”选择任务,并加入到每个人都有一个任务的子选定人员中


我没有你的db,希望它能工作或给你正确的方向。

你可以使用
ROW\u NUMBER()


显然,您只需更改select语句即可获得所需的列。

您只需更改我添加的最后一行即可。仅选择每个客户端的最新日期:

select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,t.Subject,t.CreatedDate 
from Dial d
join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
where c.FK_ClientID in (39157,39160)
AND CreatedDate >= ALL (SELECT DISTINCT MAX(CreatedDate) FROM Tasks WHERE PhoneNum = d.PhoneNum)

这样,您将获得所有客户机,但每个客户机只获得最后添加的一行。

请使用rank函数查找旧记录,这是未经测试的!!希望这有帮助

SELECT * FROM (

    select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,t.Subject,t.CreatedDate 
    , RANK() OVER ( PARTITION BY  N.FullName ORDER BY t.CreatedDate DESC ) AS iRank


    from Dial d
    join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
    join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
    join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
    where c.FK_ClientID in (39157,39160)

) AS t 
WHERE t.iRank = 1

您应该在以下列中使用
groupby
:PhoneNum、FullName、Reference。以及CreatedDate列上的
max
函数。然后,
内部连接
,将结果连接到您现在的查询。仅供初学者参考。t.CreatedDate desc的订单应该是这样的。您是如何获得phnum 0的日期为
12/03/2015 16:58:25
的记录的?您的预期输出与您的要求不符NVM在我的其他评论中,我已删除。我忘了正确滚动。你的问题和标题之间也有点不协调。在标题中,你想要最古老的唱片,但在你的问题中,你想要最新的……如果我试图为约翰·史密斯先生和威尔逊先生牵线搭桥,这行得通吗?或者它只会吸引wilson先生/smith先生?将前1名改为前2名以获得2张记录,但只取决于他们的创建日期我刚刚尝试了这个,因为我担心它不会吸引两个人。啊,你想把他们分组这对他想做的事情不起作用。他不想要createdate订购的最新单记录,他想要的是每个电话号码的最新创建记录。这是正确的方法,但需要稍微修改以适合他的表/列/联接/等。考虑到你有4张向上投票,这个答案似乎对其他人有效,但对我有效,答案高于你的答案,谢谢你的帮助。答案基本相同,但他做了你的工作:)。很乐意帮忙。这是一个总体上更好的答案。
SELECT * FROM (

    select distinct d.PhoneNum,d.sourcetable,N.FullName,C.fk_applicationid as ref,t.Subject,t.CreatedDate 
    , RANK() OVER ( PARTITION BY  N.FullName ORDER BY t.CreatedDate DESC ) AS iRank


    from Dial d
    join Database.dbo.DM_PhoneNumbers p on p.PhoneNum1 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_PhoneNumbers on p.PhoneNum2 = d.PhoneNum collate latin1_general_CI_AS
    join Database.dbo.DM_ClientApplicants C on C.FK_ClientID = P.FK_ApplicationID
    join Database.dbo.DM_Names N on c.FK_ClientID = N.FK_ApplicationID
    join Database.dbo.Tasks T on T.FK_ApplicationID = c.FK_ApplicationID
    where c.FK_ClientID in (39157,39160)

) AS t 
WHERE t.iRank = 1