如何获取从一个表和另一个唯一数据

问题描述:

如果我想显示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 2014-12-02 18:17:06

+0

是我不小心没得到它的变化太大 – user2136748 2014-12-02 19:19:25

你加入到config_log(表2)需要,如果你想获取唯一行包括整个复合键。

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

我拿到双打的时候我加入您线(更好的那么很多新的),但如果我使用由ORDER_NUMBER 我从表2组date_changed只是 选择ORDER_NUMBER,MAX(date_changed)我需要(但不是所有的数据)相同的唯一条目,如果我使用 从表2中选择不同的Order_Number 但是,当我尝试添加OtherData1等我得到双打。 – user2136748 2014-12-02 19:39:42

+0

表2中是否有其他字段用于识别唯一行?如果表2中有多个日期/编号匹配,您可以使用哪些其他标准来选择一个,或者是选择排名前1的足够多(可以使用子查询或CTE来完成?) – Aaron 2014-12-02 20:08:24

+0

不,这就是table2看起来只是我有很多的数据,我是这么做的吗?基本上,我想从表1中选择所有订单及其数据,并使用该订单号为表2中的每个订单选择所有最新数据。 – user2136748 2014-12-02 20:21:25

我认为你需要有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' 

您在where子句中有cr.name的事实意味着LEFT JOIN有相同的影响作为刚刚加入。