2012-12-06 2 views
0

날짜가있는 열이있는 데이터베이스가 있습니다. 이 날짜는 다를 수 있으며 일부 날짜는 같은 날짜입니다. 중복되는 경우에도 가장 높은 날짜 그룹을 어떻게 선택합니까? 데이터베이스 지퍼에 대한중복 된 경우에도 날짜가 가장 높음

+------+------------+-----------+------------+------------+---------+----- 
    | Company_Old | Plan | State | Tobacco | Eff_Date | Age | Gender | ZIP_LOOKUP_CODE | 
    +------+------------+-----------+------------+------------+---------+----- 
    | CSI  | A | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | C | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | F | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | FH | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | G | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | N | NC | No | 2012-12-01 | 65 | Male | 123 
    | CSI  | A | NC | No | 2011-12-01 | 65 | Male | 123 
    | CSI  | C | NC | No | 2011-12-01 | 65 | Male | 123 
    | CSI  | F | NC | No | 2011-12-01 | 65 | Male | 123 
    | CSI  | FH | NC | No | 2011-12-01 | 65 | Male | 123 
    | CSI  | G | NC | No | 2011-12-01 | 65 | Male | 123 
    | CSI  | N | NC | No | 2011-12-01 | 65 | Male | 123 

샘플 데이터 :

+-----------------+-------+--------+------+------------+ 
    | ZIP_LOOKUP_CODE | STATE | COUNTY | CITY | Zipcode |   
    +-----------------+-------+--------+------+------------+ 
    | 123   | NC | BLah | city | 27007  | 
데이터베이스 날짜

SELECT data.Company,data.Eff_Date, data.Monthly_Rate, data.Plan,   
    zips.ZIP_LOOKUP_CODE AS Expr1, zips.State, zips.County, zips.City, zips.Zipcode 
    FROM data INNER JOIN 
    zips ON data.ZIP_LOOKUP_CODE = zips.ZIP_LOOKUP_CODE 
    WHERE (zips.Zipcode = '27012') AND 
    (data.Company_Old LIKE '%CSI%') AND 
    (data.Plan IN ('A','C','F','F (High)','G','N')) AND 
    (data.Gender = 'Female') AND 
    (data.Age = '65') AND 
    (data.Tobacco = 'Non-Tobacco') AND 
    (data.State = 'NC') 
    Order by max(data.Eff_Date); 

샘플 :

내가 사용하고 있는데 그것은 단지 첫 번째 인스턴스를 데리고 무슨이다
+0

최고 그룹? –

답변

0

예이 this ::

SELECT data.Company, 

MAX(data.Eff_Date), data.Monthly_Rate, data.Plan,   
    zips.ZIP_LOOKUP_CODE AS Expr1, zips.State, zips.County, zips.City, zips.Zipcode 
    FROM data INNER JOIN 
    zips ON data.ZIP_LOOKUP_CODE = zips.ZIP_LOOKUP_CODE 
    WHERE (zips.Zipcode = '27012') AND 
    (data.Company_Old LIKE '%CSI%') AND 
    (data.Plan IN ('A','C','F','F (High)','G','N')) AND 
    (data.Gender = 'Female') AND 
    (data.Age = '65') AND 
    (data.Tobacco = 'Non-Tobacco') AND 
    (data.State = 'NC') 
    GROUP BYdata.Eff_Date 
+0

은 여전히 ​​하나의 항목 만 표시합니다. – Eric

0
나는 각 회사에 의해 max(eff_date)를 검색 한 후 나머지 그 하위 쿼리에 가입하도록 하위 쿼리를 사용하는 것이 좋습니다 수

: 날짜

SELECT d.Company, 
    d.Eff_Date, 
    d.Monthly_Rate, 
    d.Plan,   
    z.ZIP_LOOKUP_CODE AS Expr1, 
    z.State, 
    z.County, 
    z.City, 
    z.Zipcode 
FROM data d 
INNER JOIN zips z 
    ON d.ZIP_LOOKUP_CODE = z.ZIP_LOOKUP_CODE 
INNER JOIN 
(
    select max(Eff_Date) Eff_Date, Company, Plan 
    from data 
    group by company, Plan 
) d1 
    on d.Eff_Date = d1.Eff_Date 
    and d.company = d1.company 
    and d.plan = d1.plan 
WHERE (z.Zipcode = '27012') AND 
    (d.Company_Old LIKE '%CSI%') AND 
    (d.Plan IN ('A','C','F','F (High)','G','N')) AND 
    (d.Gender = 'Female') AND 
    (d.Age = '65') AND 
    (d.Tobacco = 'Non-Tobacco') AND 
    (d.State = 'NC') 
Order by d.Eff_Date; 
+0

중복 된 날짜 필드가있는 경우에도 가장 날짜 집합이 아닌 여러 날짜가 표시됩니다. – Eric

+0

@Eric은 몇 가지 샘플 데이터로 [sql fiddle] (http://sqlfiddle.com/)을 만들 수 있습니까? – Taryn

+0

원본 게시물에 몇 가지 샘플 데이터를 추가했습니다. 답장을 보내 주셔서 감사합니다! – Eric