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选择最新的两个日期。 我想删除所有信息而不删除此选定的语句信息。 我怎么能这样做?
答案 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_ID
和Delivery_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
)