2014-12-02 7 views
0

Если я хочу отображать Order_Number data1 data2 data3 (последнее изменение по дате изменилось, другоеData1, OtherData2, OtherData3) date_changed проблема в том, что я был не просто одной строкой, я получал несколько строк для каждый номер для заказа.Как получить уникальные данные из одной таблицы, а другой

То, что я хотел бы получить это

1, a, f,q, cc,ccc,abc, 12/2/2014, bob 
3, c, b,h, aa,aaa,abc, 12/2/2014, bob 

Спасибо!

Я работал с

SELECT 
    t.Order_Number, 
    cr.data1, cr.data2, cr.data3, 
    t.OtherData1, t.OtherData2, t.OtherData3, 
    x.date_changed, cr.name 

FROM 
    (SELECT 
     Order_Number, 
     Max(date_changed) as date_changed 
    FROM 
     table2 
    GROUP BY 
     Order_Number) x 
JOIN 
    table2 t ON x.date_changed = t.date_changed 
LEFT JOIN 
    table1 cr ON x.Order_Number = cr.Order_Number 
WHERE cr.name = 'bob' 

Здесь приведены примеры таблиц.

Table1:

Order_Number data1 data2 data3 name 
    1   a  f  q  bob 
    2   b  g  g  john 
    3   c  b  h  bob  
    4   d  s  j  john 

Table2:

Order_Number date_changed OtherData1 OtherData2 OtherData3 
    1    11/30/2014  aa   aaa   abc 
    1    12/1/2014   bb   bbb   def 
    1    12/2/2014   cc   ccc   abc 
    3    12/1/2014   dd   aaa   def 
    2    11/30/2014  dd   bbb   abc 
    2    12/1/2014   ss   ccc   def 
    3    12/2/2014   aa   aaa   abc 
    4    11/26/2014  fc   wer   wsd 
+0

является conf_log и table2 одинаковыми? – radar

+0

да я случайно не получил он изменил слишком – user2136748

ответ

1

Ваш Присоединяйтесь к config_log (Table2) должна включать в себя весь составной ключ, если вы хотите получить уникальные строки.

JOIN 
    conf_log t ON x.date_changed = t.date_changed 
    And x.Order_Number = t.Order_number 
+0

я дубли, когда я добавить строку (лучше тогда лотов больше), но если я использую только выберите ORDER_NUMBER, Макс (date_changed) в качестве date_changed из table2 группы по ORDER_NUMBER я получаю те же самые уникальные записи, которые мне нужны (но не все данные), как я мог бы получить, если я использую выберите отдельный Order_Number из таблицы2 Но в ту минуту, когда я пытаюсь добавить OtherData1 и т. д., я получаю парные разряды. – user2136748

+0

Есть ли другие поля в таблице2 для определения уникальной строки? Если в таблице 2 есть несколько идентификаторов даты/id, какие другие критерии вы могли бы использовать для выбора одного или достаточно для выбора Top 1 (что может быть сделано с помощью подзапроса или CTE? – Aaron

+0

нет, это то, что table2 выглядит просто я хочу сделать все, чтобы сделать это. Я хочу, чтобы все эти заказы и их данные для bob из таблицы 1 были использованы, и используйте этот номер заказа, чтобы выбрать все самые последние данные для каждого заказа из таблицы 2 – user2136748

0

Я думаю, вам нужно иметь 2 суб querys:

SELECT 
    Data.Order_Number, 
    Data.data1, Data.data2, Data.data3, 
    Data.OtherData1, Data.OtherData2, Data.OtherData3, 
    Data.date_changed, Data.name 
    FROM 
    (SELECT 
     Order_Number, 
     Max(date_changed) as date_changed 
    FROM 
     table2 
    GROUP BY 
     Order_Number) x 
JOIN (SELECT 
    t.Order_Number, 
    cr.data1, cr.data2, cr.data3, 
    t.OtherData1, t.OtherData2, t.OtherData3, 
    t.date_changed, cr.name 
    FROM table2 t 
    JOIN table1 cr 
    ON t.Order_Number = cr.Order_Number) AS Data 
ON x.date_changed = data.date_changed 
AND x.Order_Number = data.Order_number 
WHERE cr.name = 'bob' 

Тот факт, что вы имели cr.name в ИНЕКЕ означает, что левое соединение было то же самое, как аффект только JOIN.

Смежные вопросы