2016-03-19 20 views
0

ネットコーナーを検索しましたが、私の問題の解決策が見つかりませんでした。私はマスターと呼ばれるテーブルを持っています。機器の記録を保持しています。機器がデータベースに最初に記録されるとき、ジョブのステータスはcat_id = 11です。誰かが修復したときに同じ情報を再度入力してステータスをcat_id = 1または2または3など。 cat_id(ステータス)が何か他のものに変更されたときにcat_id = 11私はこの仕事をその "mo_number"とcat_id = selectクエリに表示しないものにします。同じテーブルのレコードのmysql 2行の比較

表:私はこの仕事がテーブルなどに表示されないようにクエリを作成する方法がわからない

SELECT m.comment_id, m.mo_number, m.part_number, m.serial_number, m.comment, 
     m.date_created, CONCAT(u.first_name, ' ', u.last_name) as name 
     FROM master AS m 
     INNER JOIN users as u ON u.user_id = m.user_id 
      INNER JOIN category as c ON m.cat_id = c.cat_id 
     WHERE u.user_id = '1' AND m.cat_id = '11' 
    ORDER BY m.mo_number DESC 

:マスターここ

id mo_number part_number cat_id  date_created user_id 
15 7200023   347893  11  01/03/2016  1 
33 7200023   347893  1  10/03/2016  5 
34 7200045   457890  11  11/03/2016  1 

expected : 
id mo_number part_number cat_id  date_created user_id 
34 7200045   457890  11  11/03/2016  1 

は私の完全な選択クエリですまだ開いている。誰かが助けることができれば感謝します。

答えて

0

SQL Fiddle

のMySQL 5.5スキーマのセットアップ

create table users (user_id int, first_name varchar(100), last_name nvarchar(100)); 
insert users (user_id, first_name, last_name) 
select 1, 'John', 'Smith' 
union 
select 5, 'Neo', 'Anderson' 
; 

create table category (cat_id int, name varchar(100)); 
insert category (cat_id, name) 
select 1, 'closed' 
union 
select 2, 'not so closed but not open too :)' 
union 
select 11, 'open' 
; 

create table master (
    id int, mo_number varchar(10), part_number varchar(10), serial_number varchar(10), 
    cat_id int, date_created date, user_id int, comment varchar(100)); 

insert master (id, mo_number, part_number, serial_number, cat_id, date_created, user_id, comment) 
select 15, '7200023', '347893', 'SN00001', 11, '2016-03-01', 1, 'seems we can do it' 
union 
select 33, '7200023', '347893', 'SN00001', 1, '2016-03-10', 5, 'tested by Morpheus' 
union 
select 34, '7200045', '457890', 'SN00002', 11, '2016-03-11', 1, 'again that Miss drop it to bath ' 

クエリ1

SELECT m.mo_number, m.part_number, m.serial_number, m.comment, 
    m.date_created, CONCAT(u.first_name, ' ', u.last_name) as name 
FROM master AS m 
    INNER JOIN users as u ON u.user_id = m.user_id 
    INNER JOIN category as c ON m.cat_id = c.cat_id 
WHERE m.cat_id = 11 and not exists(
    select 1 from master as m1 
    where m1.cat_id <> 11 
    and m1.date_created > m.date_created 
    and m1.mo_number = m.mo_number) 
ORDER BY m.mo_number DESC 

Results

| mo_number | part_number | serial_number |       comment |   date_created |  name | 
|-----------|-------------|---------------|----------------------------------|-------------------------|------------| 
| 7200045 |  457890 |  SN00002 | again that Miss drop it to bath | March, 11 2016 00:00:00 | John Smith | 
+0

返信いただいたshibormatありがとうございました。メインの投稿を編集して、実際の選択クエリを表示しました。私は内部結合を持っているので、あなたの質問を私のものに適応しようとしましたが、うまくいかなかったのです。だから私は私の全体の選択クエリを投稿しています。 – Brume007

+0

あなたに 'と存在しない場所を追加します(m1.user_id = '1'、m1.cat_id = 1、m1.date> m.date、m1.part_number = m.part_numberのm1として1を選択)' – shibormot

+0

こんにちはシボモット、私は私の質問を更新した、私は最初の場所ではっきりしなかったと思う、それを再度分析し、私に解決策を提供してください。私はそれを謙虚に感謝します。 – Brume007

関連する問題