删除3分钟内重复的数据

来源:互联网  责任编辑:小易  时间:2017/5/23 0:09:00
用户提出问题:删除3分钟内重复的数据,具体如下:

通过互联网整理获得以下解决方法:

=================1楼=====================

USE tempdb
GO
IF OBJECT_ID('[dbo].[KQ_Download]') IS NOT NULL
DROP TABLE [dbo].[KQ_Download]
GO
CREATE TABLE [dbo].[KQ_Download](
[ID_KEY] [int] IDENTITY(1,1) NOT NULL,
[Person_ID] [int] NULL,
[Card_No] [varchar](12) NOT NULL,
[Brush_Date] [varchar](10) NOT NULL,
[Brush_Time] [varchar](5) NOT NULL,
[Moc_No] [varchar](3) NOT NULL,
[Data_Flag] [smallint] NOT NULL,
[Brush_DateTime] [datetime] NULL,
[Is_Falsity] [bit] NULL,
[FileName] [varchar](128) NULL,
PRIMARY KEY CLUSTERED 
(
[ID_KEY] ASC
)
)
GO
SET IDENTITY_INSERT [KQ_Download] ON
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (35, 2, N'4309', N'2017-01-05', N'14:48', N'1', 10, CAST(0x0000A6F200F3E580 AS DateTime), 0, NULL)
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (36, 2, N'4309', N'2017-01-05', N'14:49', N'1', 10, CAST(0x0000A6F200F42BD0 AS DateTime), 0, NULL)
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (37, 2, N'4309', N'2017-01-05', N'14:50', N'1', 10, CAST(0x0000A6F200F47220 AS DateTime), 0, NULL)
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (38, 2, N'4309', N'2017-01-05', N'14:51', N'1', 10, CAST(0x0000A6F200F4B870 AS DateTime), 0, NULL)
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (39, 2, N'4309', N'2017-01-05', N'14:52', N'1', 10, CAST(0x0000A6F200F4FEC0 AS DateTime), 0, NULL)
INSERT [dbo].[KQ_Download] ([ID_KEY], [Person_ID], [Card_No], [Brush_Date], [Brush_Time], [Moc_No], [Data_Flag], [Brush_DateTime], [Is_Falsity], [FileName]) VALUES (40, 2, N'4309', N'2017-01-05', N'14:53', N'1', 10, CAST(0x0000A6F200F54510 AS DateTime), 0, NULL)
GO
;with t as (  
    select row_number() over(partition by [Person_ID] order by [ID_KEY]) as rid
    , ABS(DATEDIFF(minute, CONVERT(CHAR(10),GETDATE(),120)+' '+[Brush_Time], CONVERT(CHAR(10),GETDATE(),120)+' 14:50')) AS absCol
    , CONVERT(CHAR(10),GETDATE(),120) AS currTime
    , * 
    from [KQ_Download] 
    WHERE [Brush_DateTime]>CONVERT(CHAR(10),GETDATE(),120)
AND ABS(DATEDIFF(minute, CONVERT(CHAR(10),GETDATE(),120)+' '+[Brush_Time], CONVERT(CHAR(10),GETDATE(),120)+' 14:50'))<=3
)
--select * from t where rid=1  ORDER BY [ID_KEY]
DELETE FROM t where rid!=1

SELECT * FROM dbo.KQ_Download AS kd

=================2楼=====================

抛砖引玉吧, 其实具体的业务你最清楚, 你可以根据我的代码, 稍改一下就可以了。

=================3楼=====================


什么样的算重复,另外,3分钟内是什么,是对于任何一条数据,往前3分钟,往后3分钟都算,还是怎么计算的呢

=================4楼=====================

这 10 条数据,怎么保留呢 ?
10:01
10:02
10:03
10:04
10:05
10:06
10:07
10:08
10:09
10:10

=================5楼=====================

引用 3 楼 yupeigu 的回复:
什么样的算重复,另外,3分钟内是什么,是对于任何一条数据,往前3分钟,往后3分钟都算,还是怎么计算的呢

我举个例子吧,就比如新增加了14:53,14:54,14:55,14:56四条考勤数据,但是在原数据里有14:49和14:52的数据,当把这些记录添加到表之后,他就会删除14:53,14:54,14:55这3条数据,是前后3分钟的都不要,也就是2条刷卡时间间隔为3分钟,在三分钟之内的全部删除

=================6楼=====================

引用 4 楼 wmxcn2000 的回复:
这 10 条数据,怎么保留呢 ?
10:01
10:02
10:03
10:04
10:05
10:06
10:07
10:08
10:09
10:10

只保留01,04,07和10

=================7楼=====================

/* 简化的测试数据
CREATE TABLE KQ_Download(
    ID_KEY int NOT NULL,
    Card_No varchar(12) NOT NULL,
    Brush_DateTime datetime NULL
    PRIMARY KEY CLUSTERED 
    (
        ID_KEY ASC
    )
)
GO

TRUNCATE TABLE KQ_Download

;WITH T(ID_KEY,Card_No,Brush_DateTime) AS (
    SELECT 35,N'4309','2017-01-05 14:48' UNION ALL
    SELECT 36,N'4309','2017-01-05 14:49' UNION ALL
    SELECT 37,N'4309','2017-01-05 14:50' UNION ALL
    SELECT 38,N'4309','2017-01-05 14:51' UNION ALL
    SELECT 39,N'4309','2017-01-05 14:52' UNION ALL
    SELECT 40,N'4309','2017-01-05 14:53' UNION ALL
    SELECT 41,N'4309','2017-01-05 14:56' UNION ALL
    SELECT 42,N'4309','2017-01-05 14:58' UNION ALL
    SELECT 43,N'4309','2017-01-05 15:00' UNION ALL
    SELECT 44,N'4309','2017-01-05 15:02'
)
INSERT INTO KQ_Download
SELECT *
  FROM T
GO
 */

;WITH a(ID_KEY,Card_No,Brush_DateTime,rn) AS (
    -- 每个卡按时间排序号
    SELECT ID_KEY,Card_No,Brush_DateTime,
           ROW_NUMBER() OVER(PARTITION BY Card_No
                             ORDER BY Brush_DateTime)
      FROM KQ_Download
),
b(ID_KEY,Card_No,Brush_DateTime,rn,group_no) AS (
    -- 把连续间隔3分钟内的段用group_no区分,避免从头到尾的大递归
        SELECT a.*,
               a.rn
          FROM a
     LEFT JOIN a a0
            ON a0.Card_No = a.Card_No
           AND a0.rn + 1 = a.rn
         WHERE DATEDIFF(minute,ISNULL(a0.Brush_DateTime,0),a.Brush_DateTime) >= 3
        UNION ALL
        SELECT a.*,
               b.group_no
          FROM b
          JOIN a
            ON a.Card_No = b.Card_No
           AND a.rn = b.rn + 1
         WHERE DATEDIFF(minute,b.Brush_DateTime,a.Brush_DateTime) < 3
),
c(ID_KEY,Card_No,Brush_DateTime,rn,group_no,reserved,next_dt) AS (
        SELECT *,
               1,
               DATEADD(minute,3,Brush_DateTime)
          FROM b
         WHERE rn = group_no
        UNION ALL
        SELECT b.*,
               CASE WHEN b.Brush_DateTime >= c.next_dt THEN
                    1
               ELSE
                    0
               END,
               CASE WHEN b.Brush_DateTime >= c.next_dt THEN
                    DATEADD(minute,3,b.Brush_DateTime)
               ELSE
                    c.next_dt
               END
          FROM c
          JOIN b
            ON b.Card_No = c.Card_No
           AND b.group_no = c.group_no
           AND b.rn = c.rn + 1
)
DELETE KQ_Download
  FROM KQ_Download, c
 WHERE KQ_Download.ID_KEY = c.ID_KEY
   AND c.reserved = 0

SELECT * FROM KQ_Download

     ID_KEY Card_No      Brush_DateTime
----------- ------------ ----------------
         35 4309         2017-01-05 14:48
         38 4309         2017-01-05 14:51
         41 4309         2017-01-05 14:56
         43 4309         2017-01-05 15:00


又:原本想跳过 group_no 内的递归,结果不对。
删除了 15:00 而保留了 15:02
WITH a(...
),
b(...
)
DELETE KQ_Download
  FROM KQ_Download, b
 WHERE KQ_Download.ID_KEY = b.ID_KEY
   AND ((b.rn - b.group_no) % 3) <> 0 -- (rn - group_no) 为一个 group_no 下的序号(0起始)

     ID_KEY Card_No      Brush_DateTime
----------- ------------ ----------------
         35 4309         2017-01-05 14:48
         38 4309         2017-01-05 14:51
         41 4309         2017-01-05 14:56
         44 4309         2017-01-05 15:02

=================8楼=====================

引用 7 楼 Tiger_Zhao 的回复:
/* 简化的测试数据
CREATE TABLE KQ_Download(
    ID_KEY int NOT NULL,
    Card_No varchar(12) NOT NULL,
    Brush_DateTime datetime NULL
    PRIMARY KEY CLUSTERED 
    (
        ID_KEY ASC
    )
)
GO

TRUNCATE TABLE KQ_Download

;WITH T(ID_KEY,Card_No,Brush_DateTime) AS (
    SELECT 35,N'4309','2017-01-05 14:48' UNION ALL
    SELECT 36,N'4309','2017-01-05 14:49' UNION ALL
    SELECT 37,N'4309','2017-01-05 14:50' UNION ALL
    SELECT 38,N'4309','2017-01-05 14:51' UNION ALL
    SELECT 39,N'4309','2017-01-05 14:52' UNION ALL
    SELECT 40,N'4309','2017-01-05 14:53' UNION ALL
    SELECT 41,N'4309','2017-01-05 14:56' UNION ALL
    SELECT 42,N'4309','2017-01-05 14:58' UNION ALL
    SELECT 43,N'4309','2017-01-05 15:00' UNION ALL
    SELECT 44,N'4309','2017-01-05 15:02'
)
INSERT INTO KQ_Download
SELECT *
  FROM T
GO
 */

;WITH a(ID_KEY,Card_No,Brush_DateTime,rn) AS (
    -- 每个卡按时间排序号
    SELECT ID_KEY,Card_No,Brush_DateTime,
           ROW_NUMBER() OVER(PARTITION BY Card_No
                             ORDER BY Brush_DateTime)
      FROM KQ_Download
),
b(ID_KEY,Card_No,Brush_DateTime,rn,group_no) AS (
    -- 把连续间隔3分钟内的段用group_no区分,避免从头到尾的大递归
        SELECT a.*,
               a.rn
          FROM a
     LEFT JOIN a a0
            ON a0.Card_No = a.Card_No
           AND a0.rn + 1 = a.rn
         WHERE DATEDIFF(minute,ISNULL(a0.Brush_DateTime,0),a.Brush_DateTime) >= 3
        UNION ALL
        SELECT a.*,
               b.group_no
          FROM b
          JOIN a
            ON a.Card_No = b.Card_No
           AND a.rn = b.rn + 1
         WHERE DATEDIFF(minute,b.Brush_DateTime,a.Brush_DateTime) < 3
),
c(ID_KEY,Card_No,Brush_DateTime,rn,group_no,reserved,next_dt) AS (
        SELECT *,
               1,
               DATEADD(minute,3,Brush_DateTime)
          FROM b
         WHERE rn = group_no
        UNION ALL
        SELECT b.*,
               CASE WHEN b.Brush_DateTime >= c.next_dt THEN
                    1
               ELSE
                    0
               END,
               CASE WHEN b.Brush_DateTime >= c.next_dt THEN
                    DATEADD(minute,3,b.Brush_DateTime)
               ELSE
                    c.next_dt
               END
          FROM c
          JOIN b
            ON b.Card_No = c.Card_No
           AND b.group_no = c.group_no
           AND b.rn = c.rn + 1
)
DELETE KQ_Download
  FROM KQ_Download, c
 WHERE KQ_Download.ID_KEY = c.ID_KEY
   AND c.reserved = 0

SELECT * FROM KQ_Download

     ID_KEY Card_No      Brush_DateTime
----------- ------------ ----------------
         35 4309         2017-01-05 14:48
         38 4309         2017-01-05 14:51
         41 4309         2017-01-05 14:56
         43 4309         2017-01-05 15:00


又:原本想跳过 group_no 内的递归,结果不对。
删除了 15:00 而保留了 15:02
WITH a(...
),
b(...
)
DELETE KQ_Download
  FROM KQ_Download, b
 WHERE KQ_Download.ID_KEY = b.ID_KEY
   AND ((b.rn - b.group_no) % 3) <> 0 -- (rn - group_no) 为一个 group_no 下的序号(0起始)

     ID_KEY Card_No      Brush_DateTime
----------- ------------ ----------------
         35 4309         2017-01-05 14:48
         38 4309         2017-01-05 14:51
         41 4309         2017-01-05 14:56
         44 4309         2017-01-05 15:02



IF OBJECT_ID('dbo.XF_WareInfo') IS NULL
CREATE TABLE dbo.XF_WareInfo (
       Ware_ID              int NOT NULL,
       System_No            varchar(10) NOT NULL,
       Ware_No              varchar(20) NOT NULL,
       Ware_Name            varchar(50) NOT NULL,
       Ware_Price           money NOT NULL,
       Ware_Discount        tinyint NOT NULL DEFAULT 100,
       Ware_Unit            varchar(8) NULL,
       Remark               varchar(30) NULL,
       PRIMARY KEY (Ware_ID ASC, System_No ASC)
)
go

  麻烦您看下,这个要怎么修改也可以达到那个效果

=================9楼=====================

Quote: 引用 7 楼 Tiger_Zhao 的回复:

delete From KQ_DOWNLOAD Where (Brush_Date>='2017-01-06' and Data_Flag>=10 and Data_Flag<20 and person_Id >-999)
           and Exists(SELECT Top 1 id_Key FROM KQ_DownLoad A 
            WHERE A.Person_Id=KQ_DownLoad.Person_Id 
             and A.Brush_DateTime < KQ_DownLoad.Brush_DateTime 
             and A.Brush_DateTime >= dateadd(minute,-3,KQ_DownLoad.Brush_DateTime))

上个错了,不好意思

=================10楼=====================

DECLARE @T AS TABLE (ID INT,Card_no VARCHAR(50),Brush_DateTime DATETIME)
;WITH T(ID_KEY,Card_No,Brush_DateTime) AS (
    SELECT 35,N'4309','2017-01-05 14:01' UNION ALL
    SELECT 36,N'4309','2017-01-05 14:02' UNION ALL
    SELECT 37,N'4309','2017-01-05 14:03' UNION ALL
    SELECT 38,N'4309','2017-01-05 14:04' UNION ALL
    SELECT 39,N'4309','2017-01-05 14:05' UNION ALL
    SELECT 40,N'4309','2017-01-05 14:06' UNION ALL
    SELECT 41,N'4309','2017-01-05 14:07' UNION ALL
    SELECT 42,N'4309','2017-01-05 14:08' UNION ALL
    SELECT 43,N'4309','2017-01-05 14:09' UNION ALL
    SELECT 44,N'4309','2017-01-05 14:10'
)
INSERT INTO @T
        ( ID, Card_no, Brush_DateTime )
SELECT *
FROM T

;WITH CTE AS( 
SELECT a.*,
   DENSE_RANK() OVER (PARTITION BY a.Card_no ORDER BY DATEDIFF(mi,b.Brush_DateTime,a.Brush_DateTime)/3) AS LBD
FROM @T a
INNER JOIN @T b ON NOT EXISTS(SELECT * FROM @T WHERE b.Card_no = Card_no AND b.Brush_DateTime > Brush_DateTime)
)
SELECT a.*
FROM CTE a
WHERE NOT EXISTS(SELECT * FROM CTE WHERE CTE.Card_no = a.Card_no AND CTE.LBD = a.LBD AND CTE.Brush_DateTime < a.Brush_DateTime)


/*
ID          Card_no                                            Brush_DateTime          LBD
----------- -------------------------------------------------- ----------------------- --------------------
35          4309                                               2017-01-05 14:01:00.000 1
38          4309                                               2017-01-05 14:04:00.000 2
41          4309                                               2017-01-05 14:07:00.000 3
44          4309                                               2017-01-05 14:10:00.000 4

*/

=================11楼=====================

引用 10 楼 KanzakiOrange 的回复:
DECLARE @T AS TABLE (ID INT,Card_no VARCHAR(50),Brush_DateTime DATETIME)
;WITH T(ID_KEY,Card_No,Brush_DateTime) AS (
    SELECT 35,N'4309','2017-01-05 14:01' UNION ALL
    SELECT 36,N'4309','2017-01-05 14:02' UNION ALL
    SELECT 37,N'4309','2017-01-05 14:03' UNION ALL
    SELECT 38,N'4309','2017-01-05 14:04' UNION ALL
    SELECT 39,N'4309','2017-01-05 14:05' UNION ALL
    SELECT 40,N'4309','2017-01-05 14:06' UNION ALL
    SELECT 41,N'4309','2017-01-05 14:07' UNION ALL
    SELECT 42,N'4309','2017-01-05 14:08' UNION ALL
    SELECT 43,N'4309','2017-01-05 14:09' UNION ALL
    SELECT 44,N'4309','2017-01-05 14:10'
)
INSERT INTO @T
        ( ID, Card_no, Brush_DateTime )
SELECT *
FROM T

;WITH CTE AS( 
SELECT a.*,
   DENSE_RANK() OVER (PARTITION BY a.Card_no ORDER BY DATEDIFF(mi,b.Brush_DateTime,a.Brush_DateTime)/3) AS LBD
FROM @T a
INNER JOIN @T b ON NOT EXISTS(SELECT * FROM @T WHERE b.Card_no = Card_no AND b.Brush_DateTime > Brush_DateTime)
)
SELECT a.*
FROM CTE a
WHERE NOT EXISTS(SELECT * FROM CTE WHERE CTE.Card_no = a.Card_no AND CTE.LBD = a.LBD AND CTE.Brush_DateTime < a.Brush_DateTime)


/*
ID          Card_no                                            Brush_DateTime          LBD
----------- -------------------------------------------------- ----------------------- --------------------
35          4309                                               2017-01-05 14:01:00.000 1
38          4309                                               2017-01-05 14:04:00.000 2
41          4309                                               2017-01-05 14:07:00.000 3
44          4309                                               2017-01-05 14:10:00.000 4

*/

我上面有发一条语句,您能不能看下在那个基础上修改

=================12楼=====================

weimei521 在说什么?
给出测试数据、预期目标、规则说明。

又:不要全文引用别人的回复,尽量精简 Quote 标记内容。

=================13楼=====================

Quote: 引用 12 楼 Tiger_Zhao 的回复:

第一条发错了,我不是又发了一条吗,那条是精简的呀,就是让您看下我发的那条语句,您给修给下

=================14楼=====================

刚刚的查找方式有问题,修正一下

DECLARE @T AS TABLE (ID INT,Card_no VARCHAR(50),Brush_DateTime DATETIME)
;WITH T(ID_KEY,Card_No,Brush_DateTime) AS (
    SELECT 35,N'4309','2017-01-05 14:48' UNION ALL
    SELECT 36,N'4309','2017-01-05 14:49' UNION ALL
    SELECT 37,N'4309','2017-01-05 14:50' UNION ALL
    SELECT 38,N'4309','2017-01-05 14:51' UNION ALL
    SELECT 39,N'4309','2017-01-05 14:52' UNION ALL
    SELECT 40,N'4309','2017-01-05 14:53' UNION ALL
    SELECT 41,N'4309','2017-01-05 14:56' UNION ALL
    SELECT 42,N'4309','2017-01-05 14:58' UNION ALL
    SELECT 43,N'4309','2017-01-05 15:00' UNION ALL
    SELECT 44,N'4309','2017-01-05 15:02'
)
INSERT INTO @T
        ( ID, Card_no, Brush_DateTime )
SELECT *
FROM T
DECLARE @DiffMin INT=3
;WITH CTE AS( 
SELECT a.*,DATEADD(mi,@DiffMin,a.Brush_DateTime) AS NextDate
FROM @T a
WHERE NOT EXISTS(SELECT * FROM @T WHERE Card_no = a.Card_no AND Brush_DateTime < a.Brush_DateTime)
UNION ALL
SELECT b.*,DATEADD(mi,@DiffMin,b.Brush_DateTime)
FROM CTE a
INNER JOIN @T b ON a.NextDate <= b.Brush_DateTime AND NOT EXISTS(SELECT * FROM @T WHERE b.Card_no = Card_no AND Brush_DateTime >= a.NextDate AND Brush_DateTime < b.Brush_DateTime)
)
SELECT ID, Card_no, Brush_DateTime FROM CTE

/*
ID          Card_no                                            Brush_DateTime
----------- -------------------------------------------------- -----------------------
35          4309                                               2017-01-05 14:48:00.000
38          4309                                               2017-01-05 14:51:00.000
41          4309                                               2017-01-05 14:56:00.000
43          4309                                               2017-01-05 15:00:00.000

*/
GO   



这个是改你那个语句的
DECLARE @DiffMin INT=3
;WITH S AS
(
SELECT * FROM KQ_DOWNLOAD Where Brush_Date>='2017-01-06' and Data_Flag>=10 and Data_Flag<20 and person_Id >-999
),CTE AS
(
SELECT a.*,DATEADD(mi,@DiffMin,a.Brush_DateTime) AS NextDate
FROM @T a
WHERE NOT EXISTS(SELECT * FROM @T WHERE Person_Id = a.Person_Id AND Brush_DateTime < a.Brush_DateTime)
UNION ALL
SELECT b.*,DATEADD(mi,@DiffMin,b.Brush_DateTime)
FROM CTE a
INNER JOIN @T b ON a.NextDate <= b.Brush_DateTime AND NOT EXISTS(SELECT * FROM @T WHERE b.Person_Id = Person_Id AND Brush_DateTime >= a.NextDate AND Brush_DateTime < b.Brush_DateTime)
)
DELETE FROM a
FROM S a
WHERE NOT EXISTS(SELECT * FROM CTE WHERE id_Key = a.id_Key)

=================15楼=====================

引用 13 楼 weimei521 的回复:
就是让您看下我发的那条语句,您给修给下

一条语句又说明不了问题。
1. 一个 Card_no 下会有多个 person_Id?
2. 那么 (person_Id <= -999) 的算不算3分钟范围?下面的数据该删哪些?
     ID_KEY Card_No      Brush_DateTime   person_Id
----------- ------------ ---------------- ---------
        101 4309         2017-01-06 08:00      -999
        102 4309         2017-01-06 08:01      -999
        103 4309         2017-01-06 08:02       100 
        104 4309         2017-01-06 08:10       100
        105 4309         2017-01-06 08:11      -999

3. (Data_Flag < 10 OR Data_Flag > 20) 的算不算3分钟范围?下面的数据该删哪些?
     ID_KEY Card_No      Brush_DateTime   Data_Flag
----------- ------------ ---------------- ---------
        111 4309         2017-01-06 09:00         5
        112 4309         2017-01-06 09:01         5
        113 4309         2017-01-06 09:02        15
        114 4309         2017-01-06 09:10        15
        115 4309         2017-01-06 09:11        25

=================16楼=====================

Quote: 引用 15 楼 Tiger_Zhao 的回复:

你说的Person_Id>-999,和 (Data_Flag < 10 OR Data_Flag > 20)  这都只是条件而已,可以不加,然后Person_Id和Card_No其实是一样的,都是从别的表中读取过来的,按照哪个字段处理都可以,如果是看你的发的内容,再加上你说的判断条件,第一张表数据都不删除,第二张表删除第五条数据

=================17楼=====================

你没理清逻辑。
A、三分钟去重复是一个独立的需求,可以加上 Brush_Date>='2017-01-06' 条件,只对最近未去重复的数据进行处理。
B、而 Data_Flag>=10 and Data_Flag<20 and person_Id >-999 条件的删除大概是无效数据的删除。
这两个操作应该各自独立进行,B先进行比较合理。

如果您还有更好的解决方法,请在最下面评论中留下您的解决方法


  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2015 www.zgxue.com All Rights Reserved