Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS访问查询_Sql_Ms Access_Ms Access 2003 - Fatal编程技术网

Sql MS访问查询

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

我正在使用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;

这毫无意义。如果为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
                  );