2010-04-29 8 views
0

난 당신이 내 데이터를 보면 나는이MySQL의 쿼리가 최신 날짜

dts       status     category   sort_by 
2010-04-29 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:54 Married    Marital Status 2  2010-04-28 12:21:15 Smoker    Tobbaco 3 
2010-04-27 12:20:27  Civil Engineers   Occupation 1 
2010-04-27 12:20:54 Married    Marital Status 2  2010-04-27 12:21:15 Smoker    Tobbaco 3 
2010-04-26 12:20:27  Civil Engineers   Occupation 1 
2010-04-26 12:20:54 Married    Marital Status 2  2010-04-26 12:21:15 Smoker    Tobbaco 3 

같은 기록을 가지고있는 표에서이 쿼리

SELECT sh.*, 
     u.initials AS initals 
    FROM database1.table1 AS sh 
    JOIN database2.user AS u ON u.userID = sh.userid 
WHERE id = 123456 
    AND dts = (SELECT MAX(dts) from database1.table1) 
ORDER BY sort_by, category 

를 실행하고, 나는 카테고리별로 최신 항목을 선택하고 및 sort_id. 그러나 어떤 경우에는 29 일에 (2010-04-29 12:20:27) 나는 단 하나의 기록이 있습니다. 그래서 이번 경우에 나는 최신 직업을 보여주고 나머지는 (최신) 직업을 보여주고 싶습니다. 그러나 현재는 하나의 행만 표시합니다.

+0

잘해야하고, 코드 상자에 테이블을 넣어. –

+0

테이블의 열 구조를 해결할 수 없습니다. –

+0

이것은 : AND dts = (database1.table1에서 최대 MAX (dts)를 선택하십시오)'...는 dts 값과 일치하는 레코드 만 확보하도록합니다. dts 값을 적절하게 세분하려면 기준별로 그룹화해야합니다. –

답변

1

당신이 무엇을 추측 최선을 노력하고, 쿼리를 사용하면 "preAgg1"하위에 "ID = 123456"을 적용 할 수 있습니다, 어쨌든 조정할 수

SELECT 
     sh.dts, 
     cast(if(preAgg1.totalPerCatSort = 1, sh.status, ' ') as char(20)) 
      as SingleStatus, 
     sh.category, 
     sh.sort_by, 
     u.initials AS initals 
    FROM 
     database1.table1 AS sh, 
     database2.user AS u, 
     (select 
       t1.category, 
       t1.sort_by, 
       max(dts) maxdts, 
       count(*) totalPerCatSort 
      from 
       database1 t1 
      group by 
       t1.category, 
       t1.sort_by) preAgg1 
    WHERE 
     sh.userid = u.userID 
    and sh.sort_by = preAgg1.sort_by 
    and sh.category = preAgg1.category 
    and sh.dts = preAgg1.maxdts 
    and id = 123456 ?? Should this actually be the UserID column ?? 
    ORDER BY 
    sort_by, 
    category 

같은 것을 할 것이다 해당 열/표를 적용 할 수있는 ID를 선택하고 다시 선택하십시오. 그렇지 않으면 찾고있는 한 후보자에 대해 다른 "사용자"가 아닌 다른 날짜 항목을 가질 수 있습니다. 모든 기록을 얻기의 우려 당

, 난 그냥 당신의 "및 ID = 123456"한정자를 제거 할 모든 당신은 정말 당신의 코드를 포맷해야

+0

내 쿼리는 테스트 할 수있는 모든 행을 선택해야합니다. 테스트 할 수 있도록 모든 행을 선택하도록하려면 어떻게해야합니까? 감사 – Autolycus