2017-01-20 6 views
0

私はデータと次のテーブルを持っている:クエリが、最小の日付を維持

user  group  dt_action 
----- -----  --------- 
John  salvage 2016-3-2 
Dennis fire  2016-1-1 
Martha fire  2016-12-23 
John  rescue 2016-1-20 
John  salvage 2017-1-26 
Developer NULL  2016-5-6 
Dennis several 2016-4-29 
Martha fire  2003-1-1 

私の考えでは、各ユーザごとにgorupsの量を数え、カテゴリ「グループ」でグループにあるが、 datetimeフィールドでは、各グループの最小日付をsumarizedに保ちたい。結果はそのようなものでなければなりません:

user  group count_group  dt_action_min 
----  ----- ----------- ------------- 
John  salvage  2   2016-3-2 
John  rescue  1   2016-1-20 
Dennis fire  1   2016-1-1 
Dennis several  1   2016-4-29 
Martha fire  2   2003-1-1 
Developer NULL  1   2016-5-6 

これは長い時間前に私の夢を盗まれたクエリですが、私はそれを得ることができます! おかげで多くは、

ダニ

+0

あなたが何をしようとしたのですか?正確に頭痛を与えるものは何ですか? –

+1

あなたがしたいことは、グループごとだけでなく、ユーザーとグループごとに情報を得ることです。だから、ユーザーとグループごとにグループ化する必要があります。その後、countとmin関数を使用します。 –

答えて

1

独自のテーブル名とデータを交換する

CREATE TABLE DATA 
    (`user` VARCHAR(9), `group` VARCHAR(7), `dt_action` VARCHAR(10)) 
; 

INSERT INTO DATA 
    (`user`, `group`, `dt_action`) 
VALUES 
    ('John', 'salvage', '2016-3-2'), 
    ('Dennis', 'fire', '2016-1-1'), 
    ('Martha', 'fire', '2016-12-23'), 
    ('John', 'rescue', '2016-1-20'), 
    ('John', 'salvage', '2017-1-26'), 
    ('Developer', NULL, '2016-5-6'), 
    ('Dennis', 'several', '2016-4-29'), 
    ('Martha', 'fire', '2003-1-1') 
; 

照会テーブル/ INSERTデータをCREATE

SELECT 
    `data`.`user` 
    , `data`.`group` 
    , `data_group`.`count_group` 
    , `data_group`.`min_dt_action` 
FROM 
`data` 
INNER JOIN (
    SELECT 
    `data`.user 
    , `data`.`group` 
    , COUNT(*) count_group 
    , MIN(`data`.`dt_action`) min_dt_action 
    FROM 
    `data` 
    GROUP BY 
    `data`.user 
    , `data`.`group` 
) data_group 
ON 
`data`.`user` = data_group.`user` 
AND 
    `data`.dt_action = data_group.min_dt_action 
ORDER BY 
`data_group`.`count_group` DESC 

結果

user  group count_group min_dt_action 
--------- ------- ----------- --------------- 
Martha  fire    2 2003-1-1  
John  salvage   2 2016-3-2  
John  rescue    1 2016-1-20  
Developer (NULL)    1 2016-5-6  
Dennis  fire    1 2016-1-1  
Dennis  several   1 2016-4-29  
+0

パーフェクト、@Rayomnd Niijland。それはうまく動作するようだ!私が持っている質問は、あなたがdt_actionの最小値でグループ化しているため、あなたが 'data_group'と呼んだ内部クエリがそれを行うために必要なだけではない理由です。内部クエリのみを使用するときに最小の日付が得られない理由を知っていますか? – mp3man

関連する問題