选择同一SQL表中的一对记录

选择同一SQL表中的一对记录,sql,vba,ms-access,Sql,Vba,Ms Access,我有一个名为RECORDS with purchase RECORDS的访问表 Id | Type | Price | Date | Processed | ------------------------------------------------------ 1 | C | 30€ | 01/01/2016 | Null | ---------------------------------------------

我有一个名为RECORDS with purchase RECORDS的访问表

   Id   | Type |  Price  |     Date    |  Processed  |
------------------------------------------------------
   1    |  C   |   30€   |  01/01/2016 |    Null     |
------------------------------------------------------
   2    |  R   |  -30€   |  01/01/2016 |    Null     |
------------------------------------------------------
   3    |  C   |   10€   |  02/02/2016 |    Null     |
------------------------------------------------------
   4    |  C   |   10€   |  02/02/2016 |    Null     |
------------------------------------------------------
   5    |  R   |  -10€   |  02/02/2016 |    Null     |
------------------------------------------------------
   6    |  C   |   25€   |  03/02/2016 |    Null     |
------------------------------------------------------
   7    |  C   |   42€   |  04/02/2016 |    Null     |
------------------------------------------------------
我要做的是将费用类型“C”记录设置为True,这些记录具有一对相反的退款记录类型“R”

像这样:1C和1R=True

   Id   | Type |  Price  |     Date    |  Processed  |
------------------------------------------------------
   1    |  C   |   30€   |  01/01/2016 |    True     |
------------------------------------------------------
   2    |  R   |  -30€   |  01/01/2016 |    True     |
------------------------------------------------------
   3    |  C   |   10€   |  02/02/2016 |    True     |
------------------------------------------------------
   4    |  C   |   10€   |  02/02/2016 |    Null     |
------------------------------------------------------
   5    |  R   |  -10€   |  02/02/2016 |    True     |
-----------------------------------------------------
   6    |  C   |   25€   |  03/02/2016 |    Null     |
------------------------------------------------------
   7    |  C   |   42€   |  04/02/2016 |    Null     |
------------------------------------------------------
到目前为止,我有这个,但它设置了所有的N电荷'C'记录

UPDATE 
RECORDS AS T1 
INNER JOIN RECORDS T2 
ON ABS(T1.Price) = ABS(T2.Price) AND T1.Date =T2.Date 
SET T1.Processed = TRUE
WHERE (T1.Type = 'C' AND T2.Type = 'R') OR (T1.Type = 'R' AND T2.Type = 'C')
存在着:


价格和日期重复的存在可能会使这一点变得非常困难,如果不是Access SQL不可能的话。您是否考虑过VBA函数?但如果您在2016年2月2日添加另一条带-10的R记录,则不会将新行或ID 4标记为true。这只适用于给定日期的第一次信用和第一次退款,这可能适用于OP。这是供参考的,不是批评,因为它可能是好的,可能永远不会在同一天有两个费用的第二次退款。是的,这种情况下,只有一对价格相反的鞋在同一天将被更新。我不知道这是否包括要求。
UPDATE RECORDS AS T 
SET T.Processed = TRUE
WHERE 
  (T.Type IN ('C', 'R') AND
    EXISTS (SELECT 1 FROM RECORDS 
      WHERE Type IN ('C', 'R') AND Type <> T.Type AND Date = T.Date AND Price + T.Price = 0
    )
  )
  AND T.Id = (SELECT MIN(ID) FROM RECORDS WHERE Date = T.Date AND Price = T.Price AND Type = T.Type)
Id  Type    Price   Date        Processed
1   C       30,00   1/1/2016    True
2   R       -30,00  1/1/2016    True
3   C       10,00   2/2/2016    True
4   C       10,00   2/2/2016    NULL
5   R       -10,00  2/2/2016    True
6   C       25,00   3/2/2016    NULL
7   C       42,00   4/2/2016    NULL