2016-03-19 22 views
0

Köşede net köşeyi aradım ama sorunumu çözemedim. Ekipman ile ilgili kayıtları içeren bir master masam var, ekipman veritabanına ilk kaydedildiğinde işin durumu cat_id = 11, biri tamir edildikten sonra aynı bilgiyi tekrar giriyor ve durumu cat_id = olarak değiştiriyor. 1 veya 2 veya 3 vb. Cat_id (status) başka bir şeye değiştiğinde cat_id = 11 Bu işi "mo_number" ile istiyorum ve cat_id = select sorgusunda görünmemesi gereken başka bir şey var.mysql aynı satırdaki 2 satır karşılaştırması

tablosu: Bu işin tablo olarak gösterilmesini kalmaması sorgu yazmak için nasıl bilmiyorum

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 

: usta İşte

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 

benim tam seçme sorgusu ise hala açık. Birisi yardım ederse memnun olurum.

cevap

0

SQL Fiddle

MySQL 5.5 Şema Kurulum:

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 ' 

Sorgu 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

Cevabınız için teşekkür ederiz shibormat, size sahip olduğum gerçek seçim sorgusunu göstermek için ana gönderiyi düzenledim. Çünkü bende içsel birleşme var ve sorgunuzu benimkilere uyarlamaya çalıştım ama işe yaramadı. Bu yüzden tüm seçme sorgumu gönderiyorum. – Brume007

+0

sadece size '' ekleyiniz ve mevcut değil (m1'den master olarak 1'i seçin. M1.user_id = '1' ve m1.cat_id = 1 ve m1.date> m.date ve m1.part_number = m.part_number) ' – shibormot

+0

Merhaba Shibormot, sorumu güncelledim, ilk başta net olmadığımı düşünüyorum, lütfen tekrar analiz edin ve bana bir çözüm sunun. Acımasızca takdir ediyorum. – Brume007