Mysql 从最后一个完整的行中选择数据
我有一个电子表格正在迁移到MySQL数据库中。将来电子表格将不会被填写。数据将直接上传到数据库。电子表格现在分为两个表格。其中一个名为Piles,包含有关该产品的信息。另一个称为立方体,包含对产品执行的测试结果。两个表中的样本数据如下: 桩:Mysql 从最后一个完整的行中选择数据,mysql,Mysql,我有一个电子表格正在迁移到MySQL数据库中。将来电子表格将不会被填写。数据将直接上传到数据库。电子表格现在分为两个表格。其中一个名为Piles,包含有关该产品的信息。另一个称为立方体,包含对产品执行的测试结果。两个表中的样本数据如下: 桩: +----------+------------+---------+-----------------+ | ID | Date | MouldID | StockCode | +----------+--------
+----------+------------+---------+-----------------+
| 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抱歉我现在看到了。请看这里,这与我的示例输出不匹配。它只显示精确匹配。如果找不到匹配项,我希望它显示最后找到的匹配项,在我的编辑中有更好的解释