Jon*_*nas 4 sql database queue inventory fifo
我的数据库中有两个表,一个用于In,一个用于Out.他们有两列,Quantity和Price.如何编写选择正确价格的SQL查询?
在例如:如果我有3项中为75,然后3项中为80.接着我有两个出为75,并且所述第三出应为75(X)和所述第四出应为80(Y).
如何为X和Y编写价格查询?他们应该使用第三排和第四排的价格.在示例中,有没有办法选择In-table中的第三行?我不能使用auto_increment作为ie"第三"行的标识符,因为这些表也包含其他项目的帖子.这些行不会被删除,出于问责原因,它们将被保存.
SELECT Price FROM In WHERE ...?
新数据库设计:
+----+
| In |
+----+------+-------+
| Supply_ID | Price |
+-----------+-------+
| 1 | 75 |
| 1 | 75 |
| 1 | 75 |
| 2 | 80 |
| 2 | 80 |
+-----------+-------+
+-----+
| Out |
+-----+-------+-------+
| Delivery_ID | Price |
+-------------+-------+
| 1 | 75 |
| 1 | 75 |
| 2 | X | <- ?
| 3 | Y | <- ?
+-------------+-------+
Run Code Online (Sandbox Code Playgroud)
OLD数据库设计:
+----+
| In |
+----+------+----------+-------+
| Supply_ID | Quantity | Price |
+-----------+----------+-------+
| 1 | 3 | 75 |
| 2 | 3 | 80 |
+-----------+----------+-------+
+-----+
| Out |
+-----+-------+----------+-------+
| Delivery_ID | Quantity | Price |
+-------------+----------+-------+
| 1 | 2 | 75 |
| 2 | 1 | X | <- ?
| 3 | 1 | Y | <- ?
+-------------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
阅读评论时,您表示您愿意添加自动增量或日期字段以了解每行的正确位置.一旦你添加了这个,我建议在In表中再添加一行名为processed,当行添加到表中时,该行自动设置为false.已复制到OUT的任何行已将其处理的字段设置为true.
+----+
| In |
+-----------+-----------+-------+-----------+
| AUtoId | Supply_ID | Price | Processed |
+-----------+-----------+-------+-----------+
| 1 | 1 | 75 | 1 |
| 2 | 1 | 75 | 1 |
| 3 | 1 | 75 | 0 |
| 4 | 2 | 80 | 0 |
| 5 | 2 | 80 | 0 |
+-----------+-----------+-------+---------- +
Run Code Online (Sandbox Code Playgroud)
然后找到要移动到OUT的下一个项目,你可以做到
SELECT TOP 1 Supply_ID, Price
FROM In WHERE Processed = 0
ORDER BY [Your Auto Increment Field or Date]
Run Code Online (Sandbox Code Playgroud)
将行移动到OUT后,您只需将该行的已处理字段更新为true即可.