Sql MS访问查询
我正在使用MS access。 我有一个名为CHANGES的表,其中包含列Sql MS访问查询,sql,ms-access,ms-access-2003,Sql,Ms Access,Ms Access 2003,我正在使用MS access。 我有一个名为CHANGES的表,其中包含列 ( CNO (int) , TNO (int), DATE_C). 我想编写一个SQL查询,它显示最近的日期,并仅按CNO对其进行分组。但我也想展示TNO SELECT tno, cno, max(date_c) FROM changes WHERE [Date_c] In (SELECT [date_c] FROM changes WHERE [date_c]<=[Enter date]) GROUP BY
( CNO (int) , TNO (int), DATE_C).
我想编写一个SQL查询,它显示最近的日期,并仅按CNO对其进行分组。但我也想展示TNO
SELECT tno, cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes WHERE [date_c]<=[Enter date])
GROUP BY cno;
这毫无意义。如果为CNO分组,则无法显示同一CNO可能不同的TNO。如果要显示任何TNO,可以执行以下操作:
SELECT FIRST(tno), cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes WHERE [date_c]<=[Enter date])
GROUP BY cno;
或者这个:
SELECT LAST(tno), cno, max(date_c)
FROM changes
WHERE [Date_c] In (SELECT [date_c] FROM changes WHERE [date_c]<=[Enter date])
GROUP BY cno;
但是,如果要同时显示这两个对象,通常需要按这两个对象进行分组。即使你说你不想这样做。在SQL中有大约七种方法可以做到这一点,因为总是有:而且是关于Stackoverflow的一个经常被问到的问题。这里有一个:我省略了您的DATEYC,这对我来说是有意义的,我将尝试解释:考虑一个客户名称的“历史”表,其中列有{CuulrErdId、CuuleMyNoD、StistyDead、EndoDeDe},并有一个顺序键,以防止CuthuryId上相同客户机ID和常规密钥的重叠周期,customer\u name business rule=不能重用以前的名称。要查找最近的名称何时生效,我们可以按customer\u ID分组并查找MAXstart\u日期,然后返回表以查找该开始日期的customer\u名称。当然还有其他方法……按客户ID和客户名称分组不是我们想要的,因为在这种情况下,这只会为每行创建一个组,因为它是一个键。非常感谢。这是一个很大的帮助:它解决了我的问题。
SELECT DISTINCT C1.tno, C1.cno,
DT1.c_most_recent_date
FROM changes AS C1
INNER JOIN (
SELECT C2.cno,
MAX(C2.c_date) AS c_most_recent_date
FROM changes AS C2
GROUP
BY C2.cno
) AS DT1
ON C1.cno = DT1.cno;
AND C1.c_date = DT1.c_most_recent_date;
SELECT DISTINCT C1.tno, C1.cno,
C1.c_date AS c_most_recent_date
FROM changes AS C1
WHERE NOT EXISTS (
SELECT *
FROM changes AS C2
WHERE C2.cno = C1.cno
AND C1.c_date < C2.c_date
);