如何在没有SQL Server中的选定语句的情况下从表中删除所有记录?

时间:2017-05-05 04:21:05

标签: sql sql-server

SELECT DISTINCT Panel_ID,Delivery_Date 
FROM SalesFact_Final_History_bk_04MAY a
WHERE (SELECT COUNT(DISTINCT(delivery_date))
       FROM SalesFact_Final_History_bk_04MAY b
       WHERE a.Delivery_Date<=b.Delivery_Date
       AND a.Panel_ID=b.Panel_ID
) < 3 
ORDER BY Panel_ID,Delivery_Date DESC

这里我从历史记录表中为每个面板ID选择最新的两个日期。 我想删除所有信息而不删除此选定的语句信息。 我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

请尝试以下方法......

DELETE SalesFact_Final_History_bk_04MAY
FROM SalesFact_Final_History_bk_04MAY
INNER JOIN ( SELECT ROW_NUMBER() OVER ( PARTITION BY Panel_ID ORDER BY Delivery_Date DESC ) AS recordNumber,
                    Panel_ID AS Panel_ID,
                    Delivery_Date AS Delivery_Date
             FROM ( SELECT Panel_ID AS Panel_ID,
                           Delivery_Date AS Delivery_Date
                    FROM SalesFact_Final_History_bk_04MAY
                    GROUP BY Panel_ID,
                             Delivery_Date
                  ) AS uniquePanel_IDDelivery_Date
           ) AS recordsToKeepFinder ON SalesFact_Final_History_bk_04MAY.Panel_ID <> recordsToKeepFinder.Panel_ID
                                   AND SalesFact_Final_History_bk_04MAY.Delivery_Date <> recordsToKeepFinder.Delivery_Date
                                   AND recordNumber > 2;

此语句采用您提供的语句生成的列表(没有排序,这在此处没用),并以INNER JOIN执行SalesFact_Final_History_bk_04MAY,使{{1}的每条记录都成为SalesFact_Final_History_bk_04MAY 的匹配Panel_IDDelivery_Date保留在SELECT语句的结果中,以及所做的每条记录匹配被省略。然后,SELECT语句保留的每条记录都会从SalesFact_Final_History_bk_04MAY中删除。

如果您有任何问题或意见,请随时发表评论。

答案 1 :(得分:0)

以下是解决方案:请您试试这个:

DELETE a
FROM SalesFact_Final_History_bk_04MAY a
WHERE (SELECT COUNT(DISTINCT(delivery_date))
        FROM SalesFact_Final_History_bk_04MAY b
        WHERE a.Delivery_Date<=b.Delivery_Date
        AND a.Panel_ID=b.Panel_ID
) >= 3

答案 2 :(得分:-1)

Try this code 

DELETE FROM SalesFact_Final_History_bk_04MAY WHERE Panel_ID NOT IN (
SELECT DISTINCT Panel_ID
FROM SalesFact_Final_History_bk_04MAY a
WHERE (SELECT COUNT(DISTINCT(delivery_date))
FROM SalesFact_Final_History_bk_04MAY b
WHERE a.Delivery_Date<=b.Delivery_Date
AND a.Panel_ID=b.Panel_ID
) < 3 
ORDER BY PANEL_ID,DELIVERY_DATE DESC
)