自动增量字段,在另一个字段发生更改后重置

时间:2011-09-13 19:50:52

标签: sql count auto-increment database-partitioning

你能提供一个非常简单的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

2 个答案:

答案 0 :(得分:4)

不要在表中存储Order,而应考虑将其添加到视图中。您可以在需要时从视图而不是表格中进行选择。

视图可以使用row_number()来计算订单,例如:

select  row_number() over (partition by Meal order by Time)
,       *
from    YourTable

Example at SE Data.

答案 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