假设我有一个只有两个字段的小数据库表。(MSSQL(像这样:
date (Date) daily_counter (Int)
-------------------------
2021-07-18 0
2021-07-18 1
2021-07-18 2
2021-07-19 0
我想插入新的第五行并插入值"0";2021-07-19";到日期字段。我想知道我新排的daily_counter是什么。
正如您可能从示例中理解的那样,daily_counter应该从每天开始自动增加。
因此,由于字段daily_counter上已经有一行日期为0。我想为我的新行向daily_counter添加1,而不向查询发送值1。
在设计这种类型的表和数据时,我该如何思考。如有任何提示,不胜感激。谢谢
Kr古斯塔夫
更新:
好吧,我想我找到了一些可行的东西。唯一的缺点是在删除和添加新行时,因为新id可能会被预先使用、删除和再次添加。
从这方面来说,我想我得到了一些可以使用的东西。
现在可能不太好看,但看起来是这样的。
当当天没有争吵时,它似乎也起作用。
DECLARE @date DATE
SET @date = '2021-07-22'
DECLARE @daily_counter INT
SET @daily_counter = (SELECT MAX(daily_counter) from mytable where date = @date);
SET @daily_counter = @daily_counter + 1;
IF @daily_counter IS NULL
BEGIN
SET @daily_counter = 1;
END
INSERT INTO
mytable
(date, daily_counter)
OUTPUT @daily_counter
VALUES (@date, @daily_counter)
再次感谢您的帮助!
不可能让数据库在行本身中自动执行此操作。所有日期都必须有一个单独的计数器(SEQUENCE会很好(。
您可以使用row_number()
函数在查询数据时进行模拟:
SELECT *, row_number() over (partition by [date] order by [date])
FROM ...
不幸的是,如果您需要在删除后保留原始位置,这仍然会失败,但现在在没有触发器或应用程序代码的数据库中没有一个好的方法可以做到这一点。