-1

来自多条记录的最大日期范围

我有一张如下表。

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 条记录不应存在,因为它们已更新其出版订阅期。

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

亲爱的,我可以获得给定日期范围的数据。但它返回 1 , 4 ,6 。我只需要记录 6 即可返回。因为我需要指定客户发布的最新日期范围。(每个客户每个出版物的最高日期范围)。至于我的输入(搜索 11 月的结束日期)。1 不是必需的,因为该客户已在 2 中延长了“DLD”期限。在第 4 条记录中也是如此。第 4 次不需要,因为它在记录 3 中扩展(更新)

4

2 回答 2

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

于 2013-12-12T06:40:51.760 回答
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
于 2013-12-12T06:52:52.460 回答