2013-12-12 104 views
-1

MAX来自多个记录的日期范围MAX在SQL中的日期范围

我有一张如下所示的表格。

Customer Publication Start Date End Date 
1 S0048 DLD   01-JAN-2013 15-NOV-2013 
2 S0048 DLD   03-MAR-2013 31-DEC-2013 
3 S0048 SLD   01-FEB-2013 31-DEC-2013 
4 S0048 SLD   01-FEB-2013 30-NOV-2013 
5 S0145 DLD   01-JAN-2013 01-MAR-2013 
6 S0145 DLD   02-FEB-2013 28-NOV-2013 

我需要通过给出结束日期范围来得到结果。 例如:如果输入:end date 01-NOV-2013 to 30-NOV-2013(搜索谁是11月一个月到期)

结果应该是

S0145 DLD   02-FEB-2013 28-NOV-2013 

请注意,第一和第四的记录不应该出现,因为他们有更新其出版认购期。

我怎样才能得到这些结果。请帮忙。

亲爱的所有人,我可以得到给定日期范围的数据。但它返回1,4,6。我只需要记录6即可获得回报。因为我需要某个出版物的特定客户的最新日期范围(每个客户每个出版物的最高日期范围)。至于我的输入(搜索11月份结束日期)。因为该客户已经延长了“DLD”期限,因此1没有必要。第4条记录也是如此。第四不需要,延续(更新)中记录3

+0

你的意思是SQL Server的?你的日期真的存储为一个字符串? –

+0

您正在使用哪些DBMS?甲骨文? Postgres的? –

+0

@ a_horse_with_no_name我正在使用oracle – user3093883

回答

0

你很可能STR_TO_DATE用于此目的:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

例如:

SELECT MAX(STR_TO_DATE(`Start Date`, '%d-%b-%Y')) FROM customers 

的格式说明(%d等)在这里列出:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

+0

亲爱的所有人,我可以获取给定日期范围内的数据。但它返回 – user3093883

+0

亲爱的所有人,我可以得到给定日期范围的数据。但它返回1,4,6。我只需要记录6即可获得回报。因为我需要某个出版物的特定客户的最新日期范围(每个客户每个出版物的最高日期范围)。至于我的输入(搜索11月份结束日期)。因为该客户已经延长了“DLD”期限,因此1没有必要。第4条记录也是如此。 4th不需要,因为它扩大(更新)在记录3中。 – user3093883

+0

@Deepa,Thankx很多。用户正在测试报告。到目前为止它是完美的。 – user3093883

0

在TSQL可以编写一个查询为:

SELECT T2.customer, 
     T2.publication, 
     T2.startdate, 
     T2.enddate 
FROM table1 T2 
     INNER JOIN (SELECT t1.customer, 
          Max(t1.enddate) AS MaxEnddate 
        FROM table1 T1 
        GROUP BY t1.customer, 
          T1.publication) T 
       ON T.customer = T2.customer 
        AND T.maxenddate = T2.enddate 
WHERE T2.enddate BETWEEN '01-NOV-2013' AND '30-NOV-2013' 

更新:

select hca_agent.account_number agency_code, 
     hca_sub.account_number subscriber_code, 
     hp_sub.party_name subscriber_name, 
     sum(xssl.quantity) qty, 
     msi.segment1 Publication_name, 
     xssl.start_date Period_from, 
     xssl.end_date Period_to-------- I need to get the MAX end date----with the relevant start date 
     from xxwnl_st_subscr_line xssl 
     inner join 
     (
     select xssl_inner.subscriber_cust_account_id, 
       MAX(xssl_inner.end_date) as MaxEnddate 
     from xxwnl_st_subscr_line xssl_inner 
     group by xssl_inner.subscriber_cust_account_id) T on 
     T.subscriber_cust_account_id = xssl.subscriber_cust_account_id 
     and T.MaxEnddate = xssl.end_date, 
     xxwnl_supp_temp_line xsl, ----others 
     xxwnl_supp_temp_header xsh,-----others 
     hz_cust_accounts hca_sub,----for customer----- 
     hz_parties hp_sub,----others 
     mtl_system_items_b msi,----for publication----- 
     hz_cust_accounts hca_agent,----others 
     hz_parties hp_agent----others 
     where xssl.supply_line_id = xsl.supply_line_id 
     and xsl.header_id = xsh.header_id 
     and hca_sub.cust_account_id = xssl.subscriber_cust_account_id 
     and hp_sub.party_id = hca_sub.party_id 
     and msi.inventory_item_id = xsl.inventory_item_id 
     and msi.organization_id = oe_sys_parameters.value('MASTER_ORGANIZATION_ID', fnd_profile.value('ORG_ID')) 
     and hca_agent.cust_account_id = xsh.cust_account_id 
     and hp_agent.party_id = hca_agent.party_id 
     and hca_agent.customer_class_code = 'SAGENT' and hca_agent.account_number like '95%' 
     and xssl.end_date between TO_DATE('&FROM_DATE','DD/MON/RRRR') 
     AND TO_DATE('&TO_DATE','DD/MON/RRRR') 
     group by hca_agent.account_number , hca_sub.account_number , hp_sub.party_name , msi.segment1 , xssl.start_date , xssl.end_date 
     order by 1,2,3 
+0

嗨Deepshikha,在我的情况下,有不止一个table.I找到内部连接的表。但在哪里放置其他表? – user3093883

+0

内部查询的目标是为每个客户和给定的出版物获取最大日期。根据此值,外部查询从主表中获取记录,其中日期位于给定日期范围之间。现在取决于你的加入条件。如果您想要将过滤器添加到整个结果中,则在外部查询中添加与新表的连接。但是,如果要更改基本记录,请将连接添加到内部查询中。 – Deepshikha

+0

---由于评论有限字符---我正在发送我的查询部分---如果你能请帮助我。 --- PART 01 选择hca_agent.account_number agency_code, hca_sub.account_number subscriber_code, hp_sub.party_name subscriber_name, 总和(xssl.quantity)数量, msi.segment1 PUBLICATION_NAME, xssl.start_date Period_from, xssl.end_date Period_to --------我需要获得MAX结束日期----相关开始日期 – user3093883