如何解决访问-查询以获取每个唯一机会的最新条目
我需要从名为tblNotes
的表中获取每个notedata
的最新opportunityid
。
这是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
);
,
我认为这很干净:从输入中创建一个带有oppty-id和每个oppty-id的max notes-date的内联搜索表,并将该表内部连接回到较小表的两列上的输入:
DROP TABLE input;
CREATE TABLE
input(notesid,opportunityid,notesdate,notesuser,notesdata) AS
SELECT 5,DATE '2020-07-14',3,'kkk'
UNION ALL SELECT 3,1,2,'another test to run'
UNION ALL SELECT 1,'This is just a test. Next action is..'
UNION ALL SELECT 9,DATE '2020-07-27',4,'test'
UNION ALL SELECT 12,DATE '2020-07-28','another day in paradise'
UNION ALL SELECT 13,DATE '2020-08-14','another test .. maybe this time'
UNION ALL SELECT 2,6,'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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。