我需要对当天的每批货做一个插入。从前一行中扣除总金额时遇到问题。我插入到tableC,但因为如果我有多个订单在一天内,它只是抓住最后一个借方条目,并从原来的最后一行总扣除。我知道这是因为我使用了ORDER BY DESC LIMIT 1,但我想不出其他方法来获取最后一行的列值。我还需要第二次插入来获得前一次插入的新总数。
我在一个变量中使用了一个select语句来在我的insert语句中运行。@vTotal
如果它是一个单一的条目插入,它会工作,但我如何工作,如果有多个行在选择语句,或者有一个更好的方法来做到这一点?
下面是我目前的测试查询:
SET @vCreatedbt := 'name@domain.com';
SET @vTotal := (SELECT tableC.total - tableB.ShipmentCharge AS total
FROM tableC, tableB
ORDER BY id DESC
LIMIT 1);
SET @vwork_order_id := null;
SET @vModified := null;
SET @vModified_by := null;
SET @vCredit := null;
SET @vid := null;
INSERT INTO tableC
SELECT @vId AS id, client_name AS descr, @vWork_order_id AS work_order_id,
@vCredit AS credit, ShipmentCharge as debit, @vTotal AS total,
now() as created, @vCreatedby as createdby,
@vModified AS modified, @vModified_by AS modified_by
FROM tblA
INNER JOIN tableD ON tableA.id = tableD.id
INNER JOIN tableB ON tableD.tracking_number = tableB.TrackingNumber
WHERE tableA.status = 'Order Shipped'
为了简化,只显示tableC的这三个字段
| id|借方|总计|
| - -----|- -----|- -----|
| 1|二十七点三七|15260.96|
查询是给我
| id|借方|总计|
| - -----|- -----|- -----|
| 1|二十七点三七|15260.96|
| 2|二十五点九六|15235.96|
| 3|二十五点|15235.96|
id自动递增
1条答案
按热度按时间qyyhg6bp1#
DEMO:
| id|个人ID|作用|天平|创建于|
| - -----|- -----|- -----|- -----|- -----|
| 1| 1|一百|一百|2023 - 06 - 08 18:05:59.811375|
| 2| 1|-20.00| 80| 2023 - 06 - 08 18:05:59.817546|
| 3| 2| 50块|50块|2023 - 06 - 08 18:05:59.819130|
| 4| 1|十点|90| 2023 - 06 - 08 18:05:59.820016|
| 5个|2|三十|80| 2023 - 06 - 08 18:05:59.821140|
| 六|2|-40.00|四十|2023 - 06 - 08 18:05:59.822273|
| id|个人ID|作用|天平|创建于|
| - -----|- -----|- -----|- -----|- -----|
| 1| 1|一百|一百|2023 - 06 - 08 18:05:59.811375|
| 2| 1|-20.00| 80| 2023 - 06 - 08 18:05:59.817546|
| 4| 1|十点|90| 2023 - 06 - 08 18:05:59.820016|
| 3| 2| 50块|50块|2023 - 06 - 08 18:05:59.819130|
| 5个|2|三十|80| 2023 - 06 - 08 18:05:59.821140|
| 六|2|-40.00|四十|2023 - 06 - 08 18:05:59.822273|
fiddle
小提琴中需要的
DATETIME(6)
-普通DATETIME
不提供所需的精度。在实践中,DATETIME
必须足够-我怀疑这个人可以在一秒钟内执行两个单独的交易。也可以不使用created_at
,而使用id
来进行行排序。