MAX中的最大日期范围

时间:2013-12-12 06:37:43

标签: sql date numeric-limits

MAX日期范围来自多个记录

我有一张如下表格。

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(搜索谁将在NOV月份到期)

结果应该是

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

请注意,第1和第4条记录不应该在那里,因为他们已经续订了他们的出版物订阅期。

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

亲爱的所有人,我可以获得给定日期范围的数据。但它返回1,4,6。我只需要记录6即可返回。因为我需要为出版物指定客户的最新日期范围。(每个出版物的每个客户的最高日期范围)。至于我的输入(搜索11月结束日期)。由于该客户已将“DLD”期限延长至2,因此在第4条记录中相同,因此不需要1。第4次不需要在记录3中延长(续订)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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