我正在尝试解释在 MSAccess 中构建的查询并将其转换为 SQL Server 的可用 SQL。
这是 SQL 视图中 Access 的语句:
SELECT CUSTFILE.CUSTNUM,
Last(GENPOL.eff_date) AS LastOfeff_date,
First(GENPOL.appnum) AS FirstOfAPPNUM
FROM GENPOL INNER JOIN CUSTFILE ON GENPOL.entnum = CUSTFILE.ENTNUM
GROUP BY CUSTFILE.CUSTNUM
HAVING...
ORDER BY LastGENPOL.eff_date DESC;
我们知道First()
andLast()
函数在 SQL Server 中无效并且不起作用,所以我尝试使用MIN()
andMAX()
函数,因为该表没有增量 ID 字段或任何东西。一个大问题是,例如 appnum 在它的字段中可能有非常奇怪的数据,例如:
MTP-021106
或者
HMTP-271103
因此,如果最后appnum
插入的是HMTP-271103
并且 genpol 表中有较早的条目,例如MTP-021106
它们的 appnum
ThanMTP-021106
将被返回,因为M
大于H
。
此外,eff_date
由于最新记录的日期可能比最后一个输入的日期更早,因此可能存在相同类型的问题。
Last(GENPOL.eff_date) AS LastOfeff_date,
CUSTFILE.CUSTNUM
最终,查询为满足条件的每个返回一行HAVING
。
我认为可能的答案是使用该ROW_NUMBER()
函数来获得我需要的结果,但无法让它与 GROUP BY 语句一起使用。
表 GENPOL:
(PK)appnum, varchar(13) eff_date,日期时间 ntnum, varchar(15)
表 CUSTFILE:
(PK)CUSTNUM, varchar(8) ENTNUM, varchar(15)
样本数据
客户编号 | LastOfeff_date | FirstOfAppnum MI99103 | 2013-01-01 | MTP-991103 MI99104 | 2013-01-01 | MTP-991104 MI99105 | 2013-01-01 | MTP-991105