【问题标题】:mysql query of 2 tables with inner join带有内部连接的 2 个表的 mysql 查询
【发布时间】:2016-12-30 21:59:34
【问题描述】:

我想加入表 A 和表 B 并显示每辆卡车的最新条目。

  1. 表 A 列:TA ID、Truck_Num、Serial_Num
  2. 表 B 列:TB ID、Serial_Num、Lat、Long、DateTime

期望的输出

 Truck   |     DateTime     |    Serial_Num   |       Lat   |      Long                
   1     |     datestamp    |       123       |        1    |       -1                                     
   2     |     datestamp    |       456       |        2    |       -2

使用连接查询

SELECT a.Truck b.Lat b.Long b.DateTime FROM TB as b INNER JOIN TA AS a a.Serial_Num=b.Serial_Num; 

我试过了,但它只给了我最近的条目时间。

SELECT a.Truck b.Lat b.Long b.DateTime FROM TB as b INNER JOIN TA AS a a.Serial_Num=b.Serial_Num WHERE b.DateTime = (SELECT MAX(b.DateTime) FROM TB tb WHERE a.Truck_Num=Truck_Num);

【问题讨论】:

    标签: mysql sorting datetime inner-join columnsorting


    【解决方案1】:

    这将显示每辆卡车的最新物品。如果您要显示的其余信息在所有行中都相同,则可以将其放在 group by 子句中,如果不是,则必须对此结果进行联接

    SELECT Serial_Num, MAX(DateTime) FROM TB GROUP BY Serial_Num;
    

    如果数据不相等并且不能放在group by子句中,这是你必须做的连接

    SELECT Truck_Num, Lat, Long, maxDateTime FROM TB as b 
       INNER JOIN TA AS a ON a.Serial_Num=b.Serial_Num
       INNER JOIN (SELECT Serial_Num, MAX(DateTime) as maxDateTime
                   FROM TB GROUP BY Serial_Num) as c 
                   ON b.Serial_Num=c.Serial_Num AND maxDateTime = DateTime
    

    【讨论】:

      【解决方案2】:

      它应该工作,你可以检查这个问题: Select only one row with max field with One-Many Relationship Table

      SELECT
          ta.Truck,
          tb.Lat,
          tb.Long,
          MAX(tb.DateTime),
          ta.Serial_Num as Serial_Num
      FROM
          TB as tb
      INNER JOIN
          TA as ta
      ON (tb.Serial_Num = ta.Serial_Num)
      GROUP BY
          tb.Serial_Num
      

      【讨论】:

      • 您不能选择不在子句 group by 中的列
      猜你喜欢
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多