【问题标题】:Delete entries of a specific time range删除特定时间范围的条目
【发布时间】:2018-01-12 13:10:56
【问题描述】:

我想从现有表中删除响应特定时间范围的条目(如果它们存在于该表中),然后计算它们并将它们插入其中。 如果它们不存在,则创建它们并插入到表中。 那怎么可能呢? 谁能举个例子? 表结构应如下:

create table test_table 
(
   [Date] float
  ,[UserName] nvarchar(max)
  ,[SessionType] int
  ,[Duration] float
  ,[MessageCount] int
)

【问题讨论】:

  • 能不能加表结构
  • Date 应该是 datetime 数据类型。
  • 我想将时间范围与日期列进行比较
  • 到目前为止你尝试过什么?请发布您的问题,以便我们帮助您解决问题。
  • @WEI_DBA 我不认为它应该是数据类型,因为浮点数对于大计算来说更快

标签: sql-server sql-server-2008 sql-delete


【解决方案1】:

如果您有一个存储日期和时间的列,那么您可以根据它删除记录。

假设我的表上有一个名为 CreateDate 的列。然后我可以删除 Just Giving 在今天上午 10 点到 11 点之间创建的所有记录

DELETE FROM MyTable WHERE 
CreateDate BETWEEN '2018-01-12 10:00:00.000' AND '2018-01-12 11:00:00.000'

现在使用 Normal INSERT 语句再次插入值

【讨论】:

  • 感谢您的帮助
【解决方案2】:

您可以按照这样的步骤进行操作

首先将时间范围内的记录集存储在临时表中

SELECT * INTO tempTable FROM YourTable WHERE CONVERT(FLOAT, [Date]) BETWEEN 43100.3603763503 AND 43110.3603763503

然后从表中删除记录

DELETE FROM YourTable WHERE CONVERT(FLOAT, [Date]) BETWEEN 43100.3603763503 AND 43110.3603763503

然后根据您的要求使用tempTable 中可用的数据进行计算,并将数据插入到您的表格中

INSERT INTO YourTable
SELECT * FROM tempTable

然后删除 tempTable

DROP TABLE tempTable

【讨论】:

  • 感谢@Nitesh 的回答。我还想先检查表中是否已经存在特定时间范围的这些条目。
  • 您可以从 tempTable 中检查。比如有没有记录。
  • 我尝试了您的示例,出于某种原因,它在我们要保留的表中应用了临时表中的数据 2 次。一个在它应该放在第一位的位置,一个在最后。
【解决方案3】:

我正在更新我的解决方案,谢谢大家的帮助。

create mytable table 
(
   [Date] float
  ,[UserName] nvarchar(max)
  ,[SessionType] int
  ,[Duration] float
  ,[MessageCount] int
)
IF EXISTS (SELECT * FROM mytable WHERE [Date] >= 43082 AND [Date] < 43111)
BEGIN
DELETE FROM mytable WHERE [Date] >= 43082 AND [Date]< 43111
;WITH Data AS (
/*do the calculation of data*/
)
INSERT INTO mytable select * from Data
END
ELSE
BEGIN
;WITH Data AS (
/*do the calculation of data*/
)
INSERT INTO mytable select * from Data
END

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2021-12-23
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多