Sql server SQL:仅返回多个最早的记录
我试图使用一点复杂的sql返回一个字符串,但我就是无法基于与最新的D.CreateDateTime相同的电话号码返回它Sql server SQL:仅返回多个最早的记录,sql-server,Sql Server,我试图使用一点复杂的sql返回一个字符串,但我就是无法基于与最新的D.CreateDateTime相同的电话号码返回它 Source CallData Phonenum FK_REF D.createdatetime Source 1 609 ^Mr Richard Smith^01234567891^ 01234567891 27657 16/06/2014 Source2 1 609 ^Mr Richard
Source CallData Phonenum FK_REF D.createdatetime
Source 1 609 ^Mr Richard Smith^01234567891^ 01234567891 27657 16/06/2014
Source2 1 609 ^Mr Richard Smith^01234567891^ 01234567891 27657 21/07/2014
Source3 1 609 ^Mr Richard Smith^01234567891^ 01234567891 27657 03/10/2014
预期结果
Source CallData Phonenum FK_REF D.createdatetime
Source3 1 609 ^Mr Richard Smith^01234567891^ 01234567891 27657 03/10/2014
然而,我似乎找不到一种有效的方法,因为我试图使用
和
不起作用,或者更确切地说,我找不到将所述数据插入查询的位置
如果有人能够理解(有点复杂的)sql查询并提供足够的帮助,那将是不可思议的
多谢各位
代码如下
--Create Table #tmp2(FK_clientids varchar(50))
--Create table #tmp (phonenums varchar(50))
Delete from #tmp2
Delete from #tmp
Use DavikerTWF_MTA
INSERT INTO #tmp2
SELECT fk_clientid
FROM DM_ClientApplicants
where FK_ApplicationID in (--FK_ApplicationID goes here)
Use DavikerTWF_OTS
INSERT INTO #tmp
Select phonenum2 from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select PhoneNum1 from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select PhoneNum2 from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select PhoneNum3 from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select Partnerphonehome from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select Partnerphonemobile from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
INSERT INTO #tmp
Select Partnerphonework from DM_PhoneNumbers
where FK_ApplicationID in
(
Select FK_clientIDs from #tmp2
)
Use TouchStar
Select sourcetable,CallData,PhoneNum,DM_PhoneNumbers.FK_ApplicationID,d.CreateDateTime from Dial D
join DavikerTWF_OTS.dbo.DM_PhoneNumbers on PhoneNum= PhoneNum1
Collate latin1_general_CI_AS
where PhoneNum in
(
Select phonenums from #tmp
)
试试这样的
;WITH CTE AS
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY Phonenum ORDER BY
CAST(RIGHT(createdatetime ,4)+SUBSTRING(createdatetime, 4,2)+LEFT(createdatetime ,2)
AS DATETIME) DESC) rn
FROM TableName
)
SELECT * FROM CTE
WHERE rn = 1
试试这样的
;WITH CTE AS
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY Phonenum ORDER BY
CAST(RIGHT(createdatetime ,4)+SUBSTRING(createdatetime, 4,2)+LEFT(createdatetime ,2)
AS DATETIME) DESC) rn
FROM TableName
)
SELECT * FROM CTE
WHERE rn = 1
试试这样的
;WITH CTE AS
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY Phonenum ORDER BY
CAST(RIGHT(createdatetime ,4)+SUBSTRING(createdatetime, 4,2)+LEFT(createdatetime ,2)
AS DATETIME) DESC) rn
FROM TableName
)
SELECT * FROM CTE
WHERE rn = 1
试试这样的
;WITH CTE AS
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY Phonenum ORDER BY
CAST(RIGHT(createdatetime ,4)+SUBSTRING(createdatetime, 4,2)+LEFT(createdatetime ,2)
AS DATETIME) DESC) rn
FROM TableName
)
SELECT * FROM CTE
WHERE rn = 1
有几种方法可以做到这一点。我经常这样做的方式是使用row_number函数对按您感兴趣的键划分的行进行排序,然后只选择最上面的一个。像这样:
select sourcetable,CallData,PhoneNum,FK_ApplicationID,CreateDateTime
from
(
Select sourcetable,CallData,PhoneNum,DM_PhoneNumbers.FK_ApplicationID,d.CreateDateTime, ROW_NUMBER() Over (Partition by PhoneNum order by d.CreateDateTime desc) rownum
from Dial D
join DavikerTWF_OTS.dbo.DM_PhoneNumbers
on PhoneNum= PhoneNum1 Collate latin1_general_CI_AS
where PhoneNum in
(
Select phonenums from #tmp
)
) AllRows
where rownum = 1
有几种方法可以做到这一点。我经常这样做的方式是使用row_number函数对按您感兴趣的键划分的行进行排序,然后只选择最上面的一个。像这样:
select sourcetable,CallData,PhoneNum,FK_ApplicationID,CreateDateTime
from
(
Select sourcetable,CallData,PhoneNum,DM_PhoneNumbers.FK_ApplicationID,d.CreateDateTime, ROW_NUMBER() Over (Partition by PhoneNum order by d.CreateDateTime desc) rownum
from Dial D
join DavikerTWF_OTS.dbo.DM_PhoneNumbers
on PhoneNum= PhoneNum1 Collate latin1_general_CI_AS
where PhoneNum in
(
Select phonenums from #tmp
)
) AllRows
where rownum = 1
有几种方法可以做到这一点。我经常这样做的方式是使用row_number函数对按您感兴趣的键划分的行进行排序,然后只选择最上面的一个。像这样:
select sourcetable,CallData,PhoneNum,FK_ApplicationID,CreateDateTime
from
(
Select sourcetable,CallData,PhoneNum,DM_PhoneNumbers.FK_ApplicationID,d.CreateDateTime, ROW_NUMBER() Over (Partition by PhoneNum order by d.CreateDateTime desc) rownum
from Dial D
join DavikerTWF_OTS.dbo.DM_PhoneNumbers
on PhoneNum= PhoneNum1 Collate latin1_general_CI_AS
where PhoneNum in
(
Select phonenums from #tmp
)
) AllRows
where rownum = 1
有几种方法可以做到这一点。我经常这样做的方式是使用row_number函数对按您感兴趣的键划分的行进行排序,然后只选择最上面的一个。像这样:
select sourcetable,CallData,PhoneNum,FK_ApplicationID,CreateDateTime
from
(
Select sourcetable,CallData,PhoneNum,DM_PhoneNumbers.FK_ApplicationID,d.CreateDateTime, ROW_NUMBER() Over (Partition by PhoneNum order by d.CreateDateTime desc) rownum
from Dial D
join DavikerTWF_OTS.dbo.DM_PhoneNumbers
on PhoneNum= PhoneNum1 Collate latin1_general_CI_AS
where PhoneNum in
(
Select phonenums from #tmp
)
) AllRows
where rownum = 1
根本不清楚你想在这里做什么。一些示例数据和预期结果比我们没有的一堆sql表更能说明问题。如果您只需在最后一个选择中添加行(按Phonenum顺序按D.createdatetime desc划分),那么正确的行是否有数字1?@JamesZ您就快到了,但是OP需要将
createdatetime
column转换为datetime数据类型,以获得正确的日期顺序。@M.Ali该示例有点不正确,它们已经是正确的日期时间数据了,我只是将其作为一个示例使用。您在这里尝试执行的操作一点也不清楚。一些示例数据和预期结果比我们没有的一堆sql表更能说明问题。如果您只需在最后一个选择中添加行(按Phonenum顺序按D.createdatetime desc划分),那么正确的行是否有数字1?@JamesZ您就快到了,但是OP需要将createdatetime
column转换为datetime数据类型,以获得正确的日期顺序。@M.Ali该示例有点不正确,它们已经是正确的日期时间数据了,我只是将其作为一个示例使用。您在这里尝试执行的操作一点也不清楚。一些示例数据和预期结果比我们没有的一堆sql表更能说明问题。如果您只需在最后一个选择中添加行(按Phonenum顺序按D.createdatetime desc划分),那么正确的行是否有数字1?@JamesZ您就快到了,但是OP需要将createdatetime
column转换为datetime数据类型,以获得正确的日期顺序。@M.Ali该示例有点不正确,它们已经是正确的日期时间数据了,我只是将其作为一个示例使用。您在这里尝试执行的操作一点也不清楚。一些示例数据和预期结果比我们没有的一堆sql表更能说明问题。如果您只需在最后一个选择中添加行(按Phonenum顺序按D.createdatetime desc划分),那么正确的行是否有数字1?@JamesZ您就快到了,但是OP需要将createdatetime
列转换为datetime数据类型,以获得正确的日期顺序。@M.Ali该示例有点不正确,它们已经是正确的日期时间数据了,我只是将其作为示例使用。这很好,除了一件事,当我尝试连接另一个表时,我希望它选择其“FK_应用程序ID”我将编辑您的答案,而不是DM_Phonenumbers,以向您展示我在做什么。这很好,除了一件事,当我尝试加入另一个表时,我希望它选择其“FK_应用程序ID”而不是DM_Phonenumbers,我将编辑您的答案以向您展示我在做什么。这很好,除了一件事,当我尝试加入另一个表时,我希望它选择其“FK_应用程序ID”而不是DM_电话号码,我将编辑您的答案以显示我正在做的事情。这很好,除了一件事,当我尝试加入另一个表时,我希望它选择其“FK_应用程序ID”而不是DM_电话号码,我会编辑你的答案,让你知道我在做什么。