Access中的查询问题,有点难度,请各位帮帮忙
有一个表如下:
no id 日期1 日期2 日期3
1 1 2005/10/20 0 2006/01/03
2 1 2004/10/20 2006/01/20 0
3 1 0 2005/03/20 2005/01/02
4 2 2005/07/02 0 2005/08/02
5 2 2005/06/02 0 0
6 3 2006/01/20 0 2006/03/20
7 3 0 2006/04/20 2005/06/20
............................................................
现在要从中找出 id 相同的纪录中 日期1 ,日期2 日期3 中最大的那个纪录
例如:
结果如下:
id 日期1 日期2 日期3
1 2004/10/20 2006/01/20 0
2 2005/06/02 0 0
3 0 2006/04/20 2005/06/20
该怎么写语句啊?
问题点数:100、回复次数:6Top
1 楼wwwwb()回复于 2006-03-21 15:44:03 得分 20
详细一点,是取日期1 ,日期2 日期3 最大,还是其它标准?
比如ID=3,为什么是3 0 2006/04/20 2005/06/20
而非3 2006/01/20 0 2006/03/20?Top
2 楼fhzh520(rxjy)回复于 2006-03-21 17:53:33 得分 0
因为2006/04/20是idwei3的纪录中日期中最大的
Top
3 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-21 22:22:16 得分 20
必须确保日期1、日期2、日期3这三个字段都是日期类型,所以不应该存在0值的情况
SELECT 表名.id, 表名.日期1, 表名.日期2, 表名.日期3
FROM (SELECT qry1.[no]
FROM (SELECT qry1.id, Max(qry1.表达式1) AS 表达式1之Max
FROM (SELECT 表名.[no], 表名.id, IIf(nz(日期1,'1900-01-01')>=nz(日期2,'1900-01-01'),IIf(nz(日期3,'1900-01-01')>=nz(日期1,'1900-01-01'),日期3,日期1),IIf(nz(日期3,'1900-01-01')>=nz(日期2,'1900-01-01'),日期3,日期2)) AS 表达式1
FROM 表名) as qry1
GROUP BY qry1.id
) AS qry2 INNER JOIN qry1 ON (qry2.id = qry1.id) AND (qry2.表达式1之Max = qry1.表达式1)) as qry4 INNER JOIN 表名 ON qry4.[no]=表名.[no]Top
4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-21 22:30:16 得分 20
正确结果应该是
id 日期1 日期2 日期3
1 2004/10/20 2006/01/20 0
2 2005/07/02 0 2005/08/02
3 0 2006/04/20 2005/06/20
而不应该是搂主所说的
id 日期1 日期2 日期3
1 2004/10/20 2006/01/20 0
2 2005/06/02 0 0
3 0 2006/04/20 2005/06/20Top
5 楼wwwwb()回复于 2006-03-22 08:07:51 得分 20
SELECT *
FROM b102b AS a
WHERE 日期1=(select ma from (SELECT id, max(日期1) AS ma1, max(日期2) AS ma2, max(日期3) AS ma3, iif(ma1>ma2 and ma1>ma3,ma1,
iif(ma2>ma1 and ma2>ma3,ma2,ma3)) AS ma
FROM b102b
GROUP BY id
) where id=a.id)
or 日期2=(select ma from (SELECT id, max(日期1) AS ma1, max(日期2) AS ma2, max(日期3) AS ma3, iif(ma1>ma2 and ma1>ma3,ma1,
iif(ma2>ma1 and ma2>ma3,ma2,ma3)) AS ma
FROM b102b
GROUP BY id
) where id=a.id)
or 日期3=(select ma from (SELECT id, max(日期1) AS ma1, max(日期2) AS ma2, max(日期3) AS ma3, iif(ma1>ma2 and ma1>ma3,ma1,
iif(ma2>ma1 and ma2>ma3,ma2,ma3)) AS ma
FROM b102b
GROUP BY id
) where id=a.id);
Top
6 楼wwwwb()回复于 2006-03-22 14:23:52 得分 20
or
SELECT A.*
FROM b102b AS a INNER JOIN [select id,ma from
(SELECT id, max(日期1) AS ma1, max(日期2) AS ma2, max(日期3) AS ma3, iif(ma1>ma2 and ma1>ma3,ma1,
iif(ma2>ma1 and ma2>ma3,ma2,ma3)) AS ma FROM b102b GROUP BY id)]. AS B ON (a.id=b.id) AND (a.日期1=b.MA or a.日期2=b.ma OR a.日期3=b.MA);
Top




