Sql记录的重复

Sql记录的重复,sql,Sql,我正在尝试使用c#构建一个提醒应用程序,我想在我的应用程序中使用重复的概念[无重复,每日,每周…],但我面临的问题是如何将此提醒存储在数据库中 我试图复制提醒并更改它的日期,但如果它没有结束日期,那么这一个似乎不是一个非常明智的想法。然后我试着在数据库中保存一条记录,当某个日期变成过去,以防重复时,它会将日期修改为下一个日期,但在这里,我面临的问题是如何在特定日期内搜索提醒。我想知道是否有一种方法可以让SQL在两个日期之间为搜索临时复制一条记录 所以我现在几乎没有主意了,有什么帮助吗 我认为您不

我正在尝试使用c#构建一个提醒应用程序,我想在我的应用程序中使用重复的概念[无重复,每日,每周…],但我面临的问题是如何将此提醒存储在数据库中

我试图复制提醒并更改它的日期,但如果它没有结束日期,那么这一个似乎不是一个非常明智的想法。然后我试着在数据库中保存一条记录,当某个日期变成过去,以防重复时,它会将日期修改为下一个日期,但在这里,我面临的问题是如何在特定日期内搜索提醒。我想知道是否有一种方法可以让SQL在两个日期之间为搜索临时复制一条记录


所以我现在几乎没有主意了,有什么帮助吗

我认为您不应该动态更改提醒记录中的任何数据。您应该向数据库中添加一个名为“remDayOfWeek”的变量——如果每周都要提醒用户,则这将是用户开始的一周中的哪一天。假设您每天扫描一次需要提醒的用户。所有有每日提醒的用户都需要提醒。对于每周提醒的用户,所有“remDayOfWeek”等于每周当前日期的用户都将收到提醒。

好的,我建议如下: 不要为您需要提醒的每一天创建单独的提醒。向DB提供提醒、开始/结束日期和检查周期(每天、每周、每月),并提供另一列以跟踪用户上次看到提醒的时间。 比如:

column: | ID  | title        | Desc        | Start | End | Period       | lastCheck         |
---------------------------------------------------------------------------------------
type:   | INT | varchar(100) | varchar(300)| Date  | Date| INT (or Enum)| Date
整个想法是,如果用户跳过一天,你不需要提醒他们两次,你也不在乎过期的提醒发生了什么,只是最近的一次

假设:

no-repeat = 0
daily = 1
weekly = 2
monthly = 3
您可以使用以下命令提取特定日期所需的所有提醒:(假设SQL Server,您没有指定)

如果您希望提醒时间为24小时/1周/1个月,与上次检查的时间完全相同,则可以。否则,使用
CONVERT(date,GETDATE())
忽略用户选中的时间


最后,在用户取消提醒后,将
lastChecked
更新到当前时间。

您可以发布您尝试过的SQL查询吗?不,实际上我没有保留版本,并且从累积triesOK中丢失了版本。您可以发布表的结构和一些示例数据吗?
提醒(remId bigint,remTit varchar(100),remDec varchar(300),stDate DateTime,enDate DateTime,remCheck char,remRepeat varchar(10000))
,对于示例,您可以建议两个日期之间的任何提醒或只有开始日期的提醒,并且问题在上述remRepeat列的描述中已明确,你到底在那里储存什么?10000个字符太多了!对不起,我指的是数据库中的“列”,而不是“变量”。
SELECT * FROM Reminder 
WHERE (GetDate() BETWEEN Start AND End) 
AND ((Period = 0 AND lastChecked IS NULL) 
OR (Period = 1 AND GetDate() > DATEADD(day,1,lastChecked))
OR (Period = 2 AND GetDate() > DATEADD(week,1,lastChecked))
OR (Period = 3 AND GetDate() > DATEADD(month,1,lastChecked)));