带子查询的多个条件(SWITCH 或 IIF)

Multiple Conditions with subquery (SWITCH or IIF)

我在查询中遇到了问题,如果车辆已售出、销售取消和重新销售,则 return 具有最近销售日期的车辆 ID 号(这是通过检查完成的如果与车辆相关的交易数量为奇数)

有时最近的交易日期不是最终销售日期而是取消交易(系统以不直观的顺序批处理/处理交易)。

注意:我使用的是 MS Acces

我需要什么帮助

编写查询以确定如果最近的交易 return 是取消交易,那么 return 第二个最近的交易。

SQL

SELECT DISTINCT N.vin, 
                N.[trans category], 
                N.[model category], 
                Max(N.[trans date]) 
FROM   new_bbss N 
WHERE  N.[trans category] NOT LIKE '*Individual*' 
       AND ( N.[trans category] ) NOT LIKE '*Corporate*' 
       AND ( n.[trans category] ) NOT LIKE '*Partners*' 
       AND ( n.[trans category] ) NOT LIKE '*Special*' 
       AND ( n.[trans category] ) NOT LIKE '*Employee*' 
       AND ( n.[trans category] ) NOT LIKE '*Mobile*' 
       AND ( n.[trans category] ) NOT LIKE '*JLR FLEET*' 
       AND N.vin IN(SELECT vin 
                    FROM   new_bbss 
                    WHERE  [retailer code] LIKE 'R*' 
                           AND new_bbss.vin NOT IN(SELECT vin 
                                                   FROM   cleansed_vins) 
                    GROUP  BY vin 
                    HAVING Count(vin) > 1 
                           AND Count(vin) MOD 2 = 1) 
GROUP  BY N.vin, 
          N.[trans category], 
          N.[model category] 

数据结构

为什么不使用子查询消除 "cancel" 事务。请参见下面代码的第 5 行。

 SELECT DISTINCT N.vin, 
            N.[trans category], 
            N.[model category], 
            Max(N.[trans date]) 
FROM   (Select * from new_bbss where new_bbss.[trans category] NOT LIKE '*Cancel*')  N 
WHERE  N.[trans category] NOT LIKE '*Individual*' 
   AND ( N.[trans category] ) NOT LIKE '*Corporate*' 
   AND ( n.[trans category] ) NOT LIKE '*Partners*' 
   AND ( n.[trans category] ) NOT LIKE '*Special*' 
   AND ( n.[trans category] ) NOT LIKE '*Employee*' 
   AND ( n.[trans category] ) NOT LIKE '*Mobile*' 
   AND ( n.[trans category] ) NOT LIKE '*JLR FLEET*' 
   AND N.vin IN(SELECT vin 
                FROM   new_bbss 
                WHERE  [retailer code] LIKE 'R*' 
                       AND new_bbss.vin NOT IN(SELECT vin 
                                               FROM   cleansed_vins) 
                GROUP  BY vin 
                HAVING Count(vin) > 1 
                       AND Count(vin) MOD 2 = 1) 
GROUP  BY N.vin, 
      N.[trans category], 
      N.[model category]