你能提供一个非常简单的SQL示例,说明如何创建一个自动递增的“count”或“order”字段,但是在另一个字段的每次更改后重新启动?在下表中,每当“膳食”字段发生变化时,“订单”字段将在“1”处重新启动。感谢。
进餐时间顺序
午餐10:30 1个
午餐11:00 2
午餐11:15 3
晚餐4:30 1个
晚餐4:45 2
晚餐5:00 3
晚餐5:30 4
答案 0 :(得分:4)
不要在表中存储Order
,而应考虑将其添加到视图中。您可以在需要时从视图而不是表格中进行选择。
视图可以使用row_number()
来计算订单,例如:
select row_number() over (partition by Meal order by Time)
, *
from YourTable
答案 1 :(得分:1)
这不应该存储在数据库中。你基本上存储了两次相同的信息(在这种情况下它是派生的,但实际上是相同的),这可能会导致问题。你最后会在最后一行之前得到一个新的午餐行,订单号将被搞砸,等等。只需在你需要的时候计算一下。
您没有提到您正在使用哪个RDBMS(在提问时始终包含该信息总是一个好主意),但以下内容将适用于SQL Server和其他支持分区功能的RDBMS:
SELECT
meal,
[time], -- I'd pick a better column name myself. Reserved words = evil
ROW_NUMBER() OVER(PARTITION BY meal ORDER BY time) AS [order] -- Another reserved word! Eeek!
FROM
My_Table