Sql Access-查询以提取每个唯一opportunity的最新条目
从名为Sql Access-查询以提取每个唯一opportunity的最新条目,sql,ms-access,Sql,Ms Access,从名为tblNotes的表中,我需要为每个opportunityid获取最新的notedata 以下是tblNotes中的数据 以下是我希望数据的样子: 我对SQL了解不多,但我发现我需要一个内部查询。我所做的阅读表明Access将notesdate存储为日期和时间代码 这是我拼凑的代码 SELECT t1.* FROM tblNotes AS t1 INNER JOIN (SELECT opportunityid, notesdata, MAX(notesdate) AS Max
tblNotes
的表中,我需要为每个opportunityid
获取最新的notedata
以下是tblNotes
中的数据
以下是我希望数据的样子:
我对SQL了解不多,但我发现我需要一个内部查询。我所做的阅读表明Access将notesdate
存储为日期和时间代码
这是我拼凑的代码
SELECT t1.*
FROM tblNotes AS t1 INNER JOIN
(SELECT opportunityid, notesdata, MAX(notesdate) AS MaxDate
FROM tblnotes GROUP BY opportunityid, notesdata)
AS t2 ON (t1.opportunityid=t2.opportunityid) AND (t1.notesdate=t2.MaxDate);
下面是我得到的:
正如你所看到的…甚至不接近。我想基本结构就藏在那里的某个地方……也许吧
谢谢,我想你想要:
select n.*
from tblNotes as n
where n.notesId = (select top 1 n2.notesId
from tblNotes as n2
where n2.opportunityId = n.opportunityId
order by n2.notesDate desc, n2.notesId desc
);
假设notesid
是主键,则每个opportunityId
返回一行,即使最近的日期有多个注释。如果希望所有注释都在最近的日期,请使用:
select n.*
from tblNotes as n
where n.notesDate = (select max(t2.notesDate)
from tblNotes as n2
where n2.opportunityId = n.opportunityId
);
我想你想要:
select n.*
from tblNotes as n
where n.notesId = (select top 1 n2.notesId
from tblNotes as n2
where n2.opportunityId = n.opportunityId
order by n2.notesDate desc, n2.notesId desc
);
假设notesid
是主键,则每个opportunityId
返回一行,即使最近的日期有多个注释。如果希望所有注释都在最近的日期,请使用:
select n.*
from tblNotes as n
where n.notesDate = (select max(t2.notesDate)
from tblNotes as n2
where n2.opportunityId = n.opportunityId
);
我认为这是干净的:从输入创建一个带有oppty id和每个oppty id的max notes date的内联搜索表,并在较小表的两列上将该表内部连接回输入:
DROP TABLE input;
CREATE TABLE
input(notesid,opportunityid,notesdate,notesuser,notesdata) AS
SELECT 5,0,DATE '2020-07-14',3,'kkk'
UNION ALL SELECT 3,1,DATE '2020-07-14',2,'another test to run'
UNION ALL SELECT 1,1,DATE '2020-07-14',2,'This is just a test. Next action is..'
UNION ALL SELECT 9,1,DATE '2020-07-27',4,'test'
UNION ALL SELECT 12,1,DATE '2020-07-28',1,'another day in paradise'
UNION ALL SELECT 13,1,DATE '2020-08-14',1,'another test .. maybe this time'
UNION ALL SELECT 2,6,DATE '2020-07-14',3,'another test to see how it works'
;
SELECT
i.*
FROM input i
INNER JOIN (
SELECT
opportunityid
, MAX(notesdate) AS notesdate
FROM input
GROUP BY opportunityid
) m
ON m.opportunityid=i.opportunityid
AND m.notesdate =i.notesdate
-- out notesid | opportunityid | notesdate | notesuser | notesdata
-- out ---------+---------------+------------+-----------+---------------------------------
-- out 2 | 6 | 2020-07-14 | 3 | another test to see how it works
-- out 5 | 0 | 2020-07-14 | 3 | kkk
-- out 13 | 1 | 2020-08-14 | 1 | another test .. maybe this time
我认为这是干净的:从输入创建一个带有oppty id和每个oppty id的max notes date的内联搜索表,并在较小表的两列上将该表内部连接回输入:
DROP TABLE input;
CREATE TABLE
input(notesid,opportunityid,notesdate,notesuser,notesdata) AS
SELECT 5,0,DATE '2020-07-14',3,'kkk'
UNION ALL SELECT 3,1,DATE '2020-07-14',2,'another test to run'
UNION ALL SELECT 1,1,DATE '2020-07-14',2,'This is just a test. Next action is..'
UNION ALL SELECT 9,1,DATE '2020-07-27',4,'test'
UNION ALL SELECT 12,1,DATE '2020-07-28',1,'another day in paradise'
UNION ALL SELECT 13,1,DATE '2020-08-14',1,'another test .. maybe this time'
UNION ALL SELECT 2,6,DATE '2020-07-14',3,'another test to see how it works'
;
SELECT
i.*
FROM input i
INNER JOIN (
SELECT
opportunityid
, MAX(notesdate) AS notesdate
FROM input
GROUP BY opportunityid
) m
ON m.opportunityid=i.opportunityid
AND m.notesdate =i.notesdate
-- out notesid | opportunityid | notesdate | notesuser | notesdata
-- out ---------+---------------+------------+-----------+---------------------------------
-- out 2 | 6 | 2020-07-14 | 3 | another test to see how it works
-- out 5 | 0 | 2020-07-14 | 3 | kkk
-- out 13 | 1 | 2020-08-14 | 1 | another test .. maybe this time
NotesID是一个PK。进一步检查后,第一块代码几乎满足了我的需要。删除1周围的括号后,查询将根据
opportunityid
返回结果,其中包含相关的notesid
。我需要为没有相应“notesid”的任何opportunityid
返回一个空条目。有什么想法吗?如果更合适的话,我会提出一个新问题。谢谢。回复到这是正确的解决方案,因为它确实回答了我提出的问题。NotesID是一个PK。进一步检查后,第一块代码几乎满足了我的需要。删除1周围的括号后,查询将根据opportunityid
返回结果,其中包含相关的notesid
。我需要为没有相应“notesid”的任何opportunityid
返回一个空条目。有什么想法吗?如果更合适的话,我会提出一个新问题。谢谢。回到这是正确的解决方案,因为它确实回答了我提出的问题。