我使用的是Ms access 2010。我的数据如下:
项目(主要是单词),其中有很多:
请求(大多数在1到20左右,不一定是按顺序排列的,有些注册为"1和2“),每个请求都有很多:
谈判(日期),或者更准确地说,“谈判结束日期”,它们不是按时间顺序排列的。
我需要的是数据的原始顺序,除了在协商中不是最新日期的条目。
我所拥有的:
id | PROJECT NAME| REQUEST| DATE
1 ----- bla ------- 3 ----- 1-2-17
2 ----- bla ------- 3 ----- 4-2-17
3 ----- bla ------- 3 ----- 2-2-17
4 ----- bla ------- 5 ----- 4-2-17
5 ----- bla ------- 5 ----- 6-2-17
6 ----- ble ------- 1 ----- 6-2-17
7 ----- ble ------- 1 ----- 9-2-17
8 ----- ble ------- 3 ----- 5-3-17
9 ----- ble ------- 3 ----- 6-3-17
10 ---- ble ------- 3 ----- 5-3-17 我需要的是:
id | PROJECT NAME| REQUEST| DATE
2 ----- bla -------- 3 ---- 4-2-17
5 ----- bla -------- 5 ---- 6-2-17
7 ----- ble -------- 1 ---- 9-2-17
9 ----- ble -------- 3 ---- 6-3-17 我不知道该从何说起。
发布于 2018-01-27 02:35:59
declare @example as table (
ExampleID int identity(1,1) not null primary key clustered
, ProjectName nvarchar(3) not null
, Request int not null
, Date_ date not null
);
insert into @example (ProjectName, Request, Date_)
select 'bla', 3, eomonth(sysdatetime(), -7) union all
select 'bla', 3, eomonth(sysdatetime(), -3) union all
select 'bla', 3, eomonth(sysdatetime(), -4) union all
select 'bla', 5, eomonth(sysdatetime(), -7) union all
select 'bla', 5, eomonth(sysdatetime(), -6) union all
select 'ble', 1, eomonth(sysdatetime(), -6) union all
select 'ble', 1, eomonth(sysdatetime(), -5) union all
select 'ble', 3, eomonth(sysdatetime(), -2) union all
select 'ble', 3, eomonth(sysdatetime(), -1) union all
select 'ble', 3, eomonth(sysdatetime(), -2);
;with cte as (
select ProjectName
, Request
, max(date_) over(partition by projectname, request order by projectName, Request ) Date_
from @example
)
select distinct ExampleID
, a.ProjectName
, a.Request
, a.Date_
from @example a
join cte b
on a.Date_ = b.Date_
and a.ProjectName = b.ProjectName
and a.Request = b.Request以前的问答
您的逻辑或数据存在一个基本问题。
在您的示例中:
id | PROJECT NAME| REQUEST| DATE
1 ----- bla ------- 1 ----- 1-2-17
2 ----- bla ------- 2 ----- 4-2-17
3 ----- bla ------- 3 ----- 2-2-17 解决方案是解析ID,它假设您的代理键按时间顺序排列,对照日期,并根据项目名称排除日期早于先前记录的日期的位置。(时间顺序并不意味着它是连续的)
当你有像这样的东西时,逻辑就会崩溃:
id | PROJECT NAME| REQUEST| DATE
1 ----- bla ------- 1 ----- 1-2-17
2 ----- bla ------- 2 ----- 4-2-17
3 ----- bla ------- 3 ----- 2-2-17
4 ----- bla ------- 6 ----- 6-2-17现在,您应该会看到类似这样的内容:
id | PROJECT NAME| REQUEST| DATE
4 ----- bla -------- 6 ---- 6-2-17 这是一个可接受的结果集吗?
发布于 2018-01-27 04:27:10
考虑将单元级查询与聚合查询连接起来,返回等于MaxDate的行
SELECT n.ID, p.[PROJECT NAME], r.[REQUEST], n.[DATE]
FROM ((PROJECTS p
INNER JOIN REQUESTS r ON p.ProjectID = r.ProjectID)
INNER JOIN NEGOTIATIONS n ON r.RequestID = n.RequestID)
INNER JOIN
(SELECT p.[PROJECT NAME], r.[REQUEST], MAX(n.[DATE]) AS MAX_DATE
FROM ((PROJECTS p
INNER JOIN REQUESTS r ON p.ProjectID = r.ProjectID)
INNER JOIN NEGOTIATIONS n ON r.RequestID = n.RequestID)
GROUP BY p.[PROJECT NAME], r.[REQUEST]
) AA aggdf
ON p.[PROJECT NAME] = aggdf.[PROJECT NAME]
AND r.[REQUEST] = aggdf.[REQUEST]
AND n.[DATE] = aggdf.MAX_DATE
ORDER BY n.ID, p.[PROJECT NAME], r.[REQUEST], n.[DATE]https://stackoverflow.com/questions/48466939
复制相似问题