4

我的数据库中有两张表,In一张用于Out. 他们有两列,QuantityPrice。如何编写选择正确价格的 SQL 查询?

例如:如果我有 3 件物品用于75,然后有 3 件物品用于80。那么我有两个物品用于75,第三物品应该用于 75(X),第四物品应该用于 80(Y)。

如何编写 X 和 Y 的价格查询?他们应该使用第三排和第四排的价格。例如,有没有办法选择In-table 中的第三行?我不能使用 auto_increment 作为标识符,即“第三”行,因为这些表也将包含其他项目的帖子。这些行不会被删除,出于责任原因,它们将被保存。

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   | <- ?
+-------------+-------+

数据库设计:

+----+
| 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   | <- ?
+-------------+----------+-------+
4

2 回答 2

5

阅读您说您愿意添加自动增量或日期字段以了解每行的正确位置的评论。添加后,我建议在 In 表中再添加一行,称为已处理,当该行添加到表中时,它会自动设置为 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     |
+-----------+-----------+-------+---------- +

然后找到下一个要移动到 OUT 的项目,你可以做

SELECT TOP 1 Supply_ID, Price 
FROM In WHERE Processed = 0
ORDER BY [Your Auto Increment Field or Date]

一旦该行移至 OUT,您只需将该行的已处理字段更新为 true。

于 2010-06-09T12:27:27.387 回答
0

我在这里看不到有帮助的简单查询。为了在 SQL 中模拟 FIFO,我会查看三个表,OPERATION、OUT 和 FIFO。OPERATION 实际上是事务的日志,FIFO 表是 FIFO 状态,OUT 是来自 FIFO 的响应。

当操作(添加和删除项目)进入 OPERATION 表时,您将使用操作(添加和删除项目)更新 CURRENT,并将对项目“out”的请求处理到 OUT 表中,从而减少 FIFO 中的值,并在必要时从 FIFO 表中删除记录。

即使那样,我也看不到一个简单的查询来处理整个事情,因为需要查询第一条记录以查看每个操作是否有足够的数量,适当地更新该记录并查询无法进行操作的其他记录履行。我的 SQL 能力水平并没有让我找到一个简单的解决方案,它对我来说构成了业务逻辑并被提升到那个层次。

于 2010-06-09T12:10:54.663 回答