Mysql 从最后一个完整的行中选择数据

Mysql 从最后一个完整的行中选择数据,mysql,Mysql,我有一个电子表格正在迁移到MySQL数据库中。将来电子表格将不会被填写。数据将直接上传到数据库。电子表格现在分为两个表格。其中一个名为Piles,包含有关该产品的信息。另一个称为立方体,包含对产品执行的测试结果。两个表中的样本数据如下: 桩: +----------+------------+---------+-----------------+ | ID | Date | MouldID | StockCode | +----------+--------

我有一个电子表格正在迁移到MySQL数据库中。将来电子表格将不会被填写。数据将直接上传到数据库。电子表格现在分为两个表格。其中一个名为Piles,包含有关该产品的信息。另一个称为立方体,包含对产品执行的测试结果。两个表中的样本数据如下:

桩:

+----------+------------+---------+-----------------+
| ID       | Date       | MouldID | StockCode       |
+----------+------------+---------+-----------------+
| 23A42895 | 2017-06-09 | 23A     | 250CDJ09.0/0412 |
| 23B42895 | 2017-06-09 | 23B     | 250CDJ07.0/0412 |
| 642895   | 2017-06-09 | 6       | 250CDJ09.0/0412 |
| 8642895  | 2017-06-09 | 86      | 250CDJ07.0/0412 |
| 842895   | 2017-06-09 | 8       | 250CDJ09.0/0412 |
+----------+------------+---------+-----------------+
立方体:

+---------+------------+-------------+---------+
| ID      | Date       | ConcTotalM3 | MouldID |
+---------+------------+-------------+---------+
| 2342895 | 2017-06-09 |        18.1 |      23 |
| 4842895 | 2017-06-09 |        57.9 |      48 |
|  842895 | 2017-06-09 |       108.4 |       8 |
| 1542895 | 2017-06-09 |       154.7 |      15 |
| 6242895 | 2017-06-09 |       204.6 |      62 |
+---------+------------+-------------+---------+
现在电子表格是手工填写的。当模具ID和日期匹配时,信息都写在一行上。然后向下拖动cubes表中的数据,直到找到另一个匹配行,并重复该过程

我的问题是,如何编写输出相同结果的sql查询。我可以用ofc编写一个查询,在date和MouldID上进行连接,但这不会“向下拖动数据”。注意,如果MouldID的数字部分匹配,那么这就是行的匹配。A和B不重要。我已经从样本数据中包含了我期望的输出,以供参考

+----------+------------+---------+-----------------+-------------+
| ID       | Date       | MouldID | StockCode       | ConcTotalM3 |
+----------+------------+---------+-----------------+-------------+
| 23A42895 | 2017-06-09 | 23A     | 250CDJ09.0/0412 |        18.1 |
| 23B42895 | 2017-06-09 | 23B     | 250CDJ07.0/0412 |        18.1 |
| 642895   | 2017-06-09 | 6       | 250CDJ09.0/0412 |        18.1 |
| 8642895  | 2017-06-09 | 86      | 250CDJ07.0/0412 |        18.1 |
| 842895   | 2017-06-09 | 8       | 250CDJ09.0/0412 |       108.4 |
+----------+------------+---------+-----------------+-------------+
编辑: 因此,为了清晰起见,我删除了一些列,因为我认为这会让事情变得混乱。我没有使用带有MoldID的联接的。目前,我正在使用一个脚本,它告诉我字母在字符串中的位置。然后我使用left()只获取数字部分

我不能做的是让联接工作以使用最后一个匹配项(如果它不能匹配当前行)。为了解释我的示例输出,前两行是匹配的,因为Cubes表中有一个模具23。模具6没有匹配项,因此它使用最后一个匹配项(从上一行)。模具86也是如此。模具8在Cubes表中有一个匹配项,因此它使用该匹配项。 我希望这能把事情弄清楚一点。谢谢

SQL FIDLE供参考:

您可以使用一对嵌套替换来避免a、B和match with cubes.ID

    select 
      Date
      , a.MouldID
      , a.StockCode
      , a.Length 
      , a.Serials
      , a.PrintNum
      , b.ConcTotalM3
      , b.Quantity
      , b.Time 
      ....
    from  Piles a
    inner join Cubes b on replace(replace(a.ID, 'A', '') , 'B','') = b.id
期待着你的帮助来摆弄这场比赛

  a.Date
  , a.ID
  , b.ID
  , replace(replace(a.ID, 'A', '') , 'B','')
  , a.MouldID
  , a.StockCode
  , b.ConcTotalM3
from  Piles a
inner join Cubes b on replace(replace(a.ID, 'A', '') , 'B','') = b.ID

将数据集限制为仅相关列,请参见:在ID中,您只有A或B,或者您也可以有其他字符???@scaisEdge在同一位置仅A或B或Smoment@Strawberry更好?“有足够的信息,但不会太多而使它过于复杂?”cheesemarathon说,这是一个巨大的进步。但我很困惑。接受的答案是否解决了问题?最好只保留数值并加入,因为随着时间的推移可能会提供其他值。我已向OP询问id是否仅包含A或B。。因此,目前应该可以使用..s+@scaisEdge匹配MoldId并不是我在这里无法做到的。请参阅“我的编辑”以了解有关问题的更多信息我的查询在id上工作而不是在MoldID上工作。。你什么意思?@scaisEdge抱歉我现在看到了。请看这里,这与我的示例输出不匹配。它只显示精确匹配。如果找不到匹配项,我希望它显示最后找到的匹配项,在我的编辑中有更好的解释