2015-07-20 31 views
0

删除除列的最小和最大价值的所有行我有一个表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。

+2

仅供参考,[提问一个好的结构化查询语言(SQL)问题](http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question) – har07

回答

0

以下内容适用于您的数据。它使用您的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 
+0

谢谢为答复。但它对我不起作用。 我有184,253行,只有1,400行已被删除。 – user3754804

+0

它以哪种方式不起作用?我的测试成功了。没有进一步的信息,我无法帮助你。 – JohnS

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

+0

谢谢。现在我发现了。 RN_ASC = RegDate ..我改变ORDER BY RegDate到访客(列),我得到最大和mim记录活着。谢谢。 – user3754804

+0

很高兴我能帮到你。如果它解决了您的问题,请随时接受此答案。您也可以编辑它。 =) –