首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤掉其子类别中没有最新日期的条目

过滤掉其子类别中没有最新日期的条目
EN

Stack Overflow用户
提问于 2018-01-27 01:56:26
回答 2查看 47关注 0票数 0

我使用的是Ms access 2010。我的数据如下:

项目(主要是单词),其中有很多:

请求(大多数在1到20左右,不一定是按顺序排列的,有些注册为"1和2“),每个请求都有很多:

谈判(日期),或者更准确地说,“谈判结束日期”,它们不是按时间顺序排列的。

我需要的是数据的原始顺序,除了在协商中不是最新日期的条目。

我所拥有的:

代码语言:javascript
运行
复制
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 

我需要的是:

代码语言:javascript
运行
复制
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 

我不知道该从何说起。

EN

回答 2

Stack Overflow用户

发布于 2018-01-27 02:35:59

代码语言:javascript
运行
复制
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

以前的问答

您的逻辑或数据存在一个基本问题。

在您的示例中:

代码语言:javascript
运行
复制
id | PROJECT NAME| REQUEST| DATE  
1 ----- bla ------- 1 ----- 1-2-17  
2 ----- bla ------- 2 ----- 4-2-17  
3 ----- bla ------- 3 ----- 2-2-17 

解决方案是解析ID,它假设您的代理键按时间顺序排列,对照日期,并根据项目名称排除日期早于先前记录的日期的位置。(时间顺序并不意味着它是连续的)

当你有像这样的东西时,逻辑就会崩溃:

代码语言:javascript
运行
复制
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

现在,您应该会看到类似这样的内容:

代码语言:javascript
运行
复制
id | PROJECT NAME| REQUEST| DATE 
4 ----- bla -------- 6 ---- 6-2-17  

这是一个可接受的结果集吗?

票数 0
EN

Stack Overflow用户

发布于 2018-01-27 04:27:10

考虑将单元级查询与聚合查询连接起来,返回等于MaxDate的行

代码语言:javascript
运行
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48466939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档