2015-07-20 47 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

很高興我能幫到你。如果它解決了您的問題,請隨時接受此答案。您也可以編輯它。 =) –