2016-09-10 3 views
0

enter image description here날짜를 사용하여 최신 데이터를 가져 오는 MySQL 쿼리

이것은 내 테이블입니다. 이제 각 user_id의 최신 company_name을 찾아야합니다. 사실, exp_to가 null 인 경우는 최신으로 간주되거나, exp_from & exp_to가 null이 아니면 exp_to date를 사용하여 최신 회사 이름을 찾아야합니다. user_id는 주어진 테이블에 여러 번 나타납니다.

id | company_name 
----------------- 
14 | Deltalife Insurance Company Ltd. 
1 | Orbital Software 
25 | MMTV  
18 | Noakhali Science & Technology University 

등등 ..... 어떻게 그것은 MySQL과 연동 할 수 있습니다 : 여기

은 내가 원하는 무엇인가? 미리 감사드립니다. 귀하가 제공 한 어떤 정보

+0

테이블의 기본 키는 무엇입니까? –

+0

ID가 자동 증가 인 –

+0

입니다. create table 및 example insert 문을 제공 할 수 있다면 id가 기본 키일 경우 –

답변

1

이것은 매우 간단한 집성 문제입니다. 당신이 알아 낸 것 같기 때문에, NULL은 NULL로 인해 some interesting behavior을 SQL에서 발생시킵니다. CASE WHEN을 사용하여 널 (NULL)을 점검하고 다른 값으로 대체 할 수 있습니다. 귀하의 경우에는

:

SELECT 
    data.* 
FROM (
    SELECT 
    *, 
    CASE WHEN exp_to is null THEN 1 ELSE exp_to END max_date 
    FROM your_table 
) data 
INNER JOIN (
    SELECT 
    user_id, 
    CASE WHEN MAX(exp_to is null) = 1 THEN 1 ELSE MAX(exp_to) END max_date 
    FROM 
    your_table 
    GROUP BY user_id 
) j 
ON data.user_id = j.user_id AND data.max_date = j.max_date 

희망이 도움이, 그리고 행운을 빕니다!

+0

그게 내가 찾고있는거야 !! 원하는 결과를 얻었습니다. 답변 해 주셔서 감사합니다. –

+0

행운을 빈다! 부수적으로, 내부 결합 및 케이스에 대해 약간의 독서를해야합니다. –

1

, 나는 그림 아웃 할 수 있습니다이 쿼리

Select * from Table_Name where exp_to = null || exp_to = (select max(exp_to) from Table_Name) 
1

이 구조적 쿼리 언어의 구조 부분에 대한 응용 프로그램입니다.

먼저 각 user_id의 최신 날짜를 알아야합니다.

 SELECT user_id, 
       MAX(IFNULL(NOW(), exp_to) exp_to 
     FROM mytable 
     GROUP BY user_id 

그런 다음, 당신이 당신의 테이블에 가입하여 회사를 찾기 위해 그 결과를 사용할 필요가 : 정보이 하위 쿼리 수익률. 각 user_id에 대한 가장 최근의 exp_to과 관련된 회사 이름을 찾아야합니다

SELECT a.user_id, a.company_name 
    FROM mytable a 
    JOIN (
      SELECT user_id, 
        MAX(IFNULL(NOW(), exp_to) exp_to 
       FROM mytable 
      GROUP BY user_id 
     ) b ON a.user_id = b.user_id AND IFNULL(NOW(), a.exp_to) = b.exp_to 

. IFNULL(NOW(),exp_to)은 NULL 날짜가 현재 시간 인 것처럼 간주된다는 요구 사항을 구현합니다.

이 쿼리는 일반적인 쿼리 패턴의 예입니다. 특정 값의 극한 (최대, 최소) 값을 가진 행을 찾습니다.

관련 문제