【问题标题】:How to delete all rows from table except the min & max value of column by date如何从表中删除除按日期列的最小值和最大值之外的所有行
【发布时间】:2015-07-20 12:01:36
【问题描述】:

我有一张表Visitors,其中包含以下列

IDVisitorsRegDate (date & time)

行:有 4、6、8、20、11、31、43 位访问者具有相同的日期(7 月 18 日),但时间不同。

另一行:有 1、5、10、4、13、15、18、11、23 位访客,日期相同(7 月 19 日)但时间不同。

类似的东西

Id  RegDate
4   2015-07-18 11:11:00.000
6   2015-07-18 11:11:01.000
8   2015-07-18 11:11:02.000
20  2015-07-18 11:11:03.000
11  2015-07-18 11:11:04.000
31  2015-07-18 11:11:05.000
43  2015-07-18 11:11:06.000
1   2015-07-19 11:11:00.000
10  2015-07-19 11:11:01.000
4   2015-07-19 11:11:02.000
13  2015-07-19 11:11:03.000
15  2015-07-19 11:11:04.000
18  2015-07-19 11:11:05.000
11  2015-07-19 11:11:06.000
23  2015-07-19 11:11:07.000

这是我的查询,显示包括日期在内的最小值和最大值。

SELECT MIN(Visitors), MAX(Visitors), cast(RegDate as date) AS DATE
FROM Visitor GROUP BY cast(RegDate as date)
ORDER BY DATE

我想从“访问者”列中删除除 RegDate 的最小值和最大值之外的所有行。

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您可以使用ROW_NUMBER查找Visitor最早和最新的RegDate

WITH Cte AS(
    SELECT *,
        RN_ASC = ROW_NUMBER() OVER(PARTITION BY CAST(RegDate AS DATE) ORDER BY RegDate ASC),
        RN_DESC = ROW_NUMBER() OVER(PARTITION BY CAST(RegDate AS DATE) ORDER BY RegDate DESC)
    FROM Visitor
)
DELETE FROM Cte WHERE RN_ASC > 1 AND RN_DESC > 1

SQLFiddle

【讨论】:

  • 谢谢。现在我发现了。 RN_ASC = RegDate .. 我将 ORDER BY RegDate 更改为访客(列),我得到了最大和最小记录。谢谢。
  • 很高兴我能帮上忙。如果它解决了您的问题,请随时接受此答案。你也可以编辑它。 =)
【解决方案2】:

以下内容适用于您的数据。它使用您的GROUP BY 查询作为DELETE 的子查询:

DELETE V FROM  
@Visitor AS v
JOIN 
(
  SELECT
    RegDate,
    MIN(Visitors) MinVisitors,
    MAX(Visitors) MaxVisitors
  FROM
    @Visitor AS V
  GROUP BY
    RegDate
) T  ON 
  v.RegDate = T.RegDate 
  AND V.Visitors <> T.MinVisitors 
  AND V.Visitors <> T.MaxVisitors

【讨论】:

  • 感谢您的回复。但这对我不起作用。我有 184,253 行,只有 1,400 行被删除。
  • 哪方面不行?我的测试成功了。没有更多信息,我帮不了你。
  • 我使用您提供的解决方案将 BLE 扫描仪数据减少到每个地址的第一个和最后一个记录,并且效果很好!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 2013-09-05
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
相关资源
最近更新 更多