2016-09-10 6 views
0

enter image description hereMySQLのクエリは、これは私のテーブルで日付

を使用して最新のデータを取得します。今私は各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

これはかなり簡単な集約の問題です。あなたが考え出したように、ヌルはsome interesting behaviorをSQLにします。 CASE WHENを使用してヌルをチェックし、別の値で置き換えることができます。あなたのケースでは

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の日付を扱うという要件を実装しています。

このクエリは、一般的なクエリパターンの例です。特定の値の極値(最大値、最小値)を持つ行を検索します。

関連する問題