注册 登录
编程论坛 ASP技术论坛

这样的select语句如何写?

hujj 发布于 2011-10-25 21:52, 1109 次点击
一个表中有年份和日期两个字段,我想筛选出每年的日期最大的记录,请问在ASP+ACCESS中,这条select语句该如何写?
13 回复
#2
gesongs2011-10-26 14:40
链接数据库。。。。。。
<%
rs=server.CreateObject("ADODB.recordset")
sql ="select (每年),max(日期) from 表  group by (每年),max(日期) order by max(日期) desc"
rs.open sql,conn,1,1
response.write("每年")&"<br>"
response.write("日期")
%>


#3
hujj2011-10-27 20:11
感谢楼上相助!不过测试时出错的语句如下:
rs.open "select yyyy,max(ymdt) from mytext group by yyyy,max(ymdt) order by yyyy desc",conn,1,1
其中YYYY是年份的字段名、YMDT是日期的字段名。

出错提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'
ODBC 驱动程序不支持所需的属性。


[ 本帖最后由 hujj 于 2011-10-27 20:13 编辑 ]
#4
hexuyue2011-10-28 20:36
select year,data,max(data) from 表名 order by year --//不知道对不对,刚学数据库的select语句,
#5
yms1232011-10-28 21:49
语句1,先按年份排序再按日期排序,年份是一样的就会自动分组
select TOP 1 * from [tablename] order by [year] desc,[day] desc
语句2,先按年份分组不排序,再按日期排序
select TOP 1 * from [tablename] group by [year] order by [day] desc
desc由大到小, asc由小到大
#6
hujj2011-10-29 08:11
参照4楼的提示,我将代码改成:
rs.open "select yyyy,max(ymdt) from mytext group by yyyy order by yyyy desc",conn,1,1
仍然是提示同样的错误,这条语句我在VFP下测试却没有问题,达到需要的结果。
#7
hujj2011-10-29 08:16
参照版主楼的提示,我将代码改成:
rs.open "select top 1 * from mytext order by yyyy desc,ymdt desc",conn,1,1
也还是提示同样的错误。
#8
laocaixg2011-10-29 08:28
Microsoft JET Database Engine 错误 '80040e07'

标准表达式中数据类型不匹配。

/inc/head.asp,行 87

求助高手帮忙解决一下这个问题,谢谢!


            Sql="Select city_oneid,city_twoid,city_threeid,[title],uid,[Text] From [china_data] Where mark='yes' and stop >= #"&date()&"# and adid="&id
        Else
            Sql="Select city_oneid,city_twoid,city_threeid,[title],uid,[Text] From [china_data] Where mark='yes' and stop >= '"&date()&"' and adid="&id
        End If
    Else
        Sql="Select city_oneid,city_twoid,city_threeid,[title],adid,[Text] From [news_data] Where adid="&id
        End If
(87行)Response.write(sql)
        Response.End
    Set Rs=Conn.Execute(Sql)
    If Not Rs.Eof Then




[ 本帖最后由 laocaixg 于 2011-10-29 11:57 编辑 ]
#9
scilent2011-10-29 08:41
改为(87行)Response.write("sql")
#10
laocaixg2011-10-29 10:58
试了一下,不行。是我把代码弄错了,应该是下面的代码:
    Else
            Sql="Select city_oneid,city_twoid,city_threeid,[title],uid,[Text] From [china_data] Where mark='yes' and stop >= '"&date()&"' and adid="&id
        End If
    Else
        Sql="Select city_oneid,city_twoid,city_threeid,[title],adid,[Text] From [news_data] Where adid="&id
    End If
(87行)Set Rs=Conn.Execute(Sql)
    If Not Rs.Eof Then
        city_oneid=Rs(0)
        city_twoid=Rs(1)
        city_threeid=Rs(2)
        WebTitle=Rs(3)&" "
        WebText=Rs(5)
        If ScriptName="show.asp" Then



[ 本帖最后由 laocaixg 于 2011-10-29 11:58 编辑 ]
#11
laocaixg2011-10-29 11:32
Microsoft JET Database Engine 错误 '80040e07'

标准表达式中数据类型不匹配。

/inc/head.asp,行 87

求助高手帮忙解决一下这个问题,谢谢!

试了一下,不行。是我把代码弄错了,应该是下面的代码:
    Else
            Sql="Select city_oneid,city_twoid,city_threeid,[title],uid,[Text] From [china_data] Where mark='yes' and stop >= '"&date()&"' and adid="&id
        End If
    Else
        Sql="Select city_oneid,city_twoid,city_threeid,[title],adid,[Text] From [news_data] Where adid="&id
    End If
(87行)Set Rs=Conn.Execute(Sql)
    If Not Rs.Eof Then
        city_oneid=Rs(0)
        city_twoid=Rs(1)
        city_threeid=Rs(2)
        WebTitle=Rs(3)&" "
        WebText=Rs(5)
        If ScriptName="show.asp" Then
#12
yms1232011-10-29 12:17
stop >= '"&date()&"'
日期时间型数据是不能使用>=、<=、>、<、=这些逻辑运算符直接比较,只能借助DateDiff函数进行比较
#13
hujj2011-10-30 19:39
今天测试了一下午,问题仍末解决!
我按照版主5楼的代码测试:
语句1,先按年份排序再按日期排序,年份是一样的就会自动分组
select TOP 1 * from [tablename] order by [year] desc,[day] desc
得到的结果是最后一年的全部记录;

语句2,先按年份分组不排序,再按日期排序
select TOP 1 * from [tablename] group by [year] order by [day] desc
得到的是最后一年日期最大的一条记录,并不是我所需要的每年一条日期最大的记录。

我用下列语句好象的得到的所需的记录:
select yyyy,max(ymdt) from mytxt group by yyyy order by yyyyy
但日期字段引用不了,用=rs("ymdt")、=rs("max_ymdt")、=rs("max(ymdt)")均出现下列提示:
ADODB.Recordset错误 '800a0cc1'
在对应所需名称或序数的集合中,未找到项目。
不引用这个字段,即不显示每年的最大日期,则可以显示每年的一条记录。

在VFP的select语句中,如果用了函数,则需要用函数名+下划线+字段名进行引用,可在ASP中应该如何引用呢?
#14
hujj2011-10-31 07:24
通过上网查询,还是使用别名解决了问题!

我在昨天测试时也试过别名,但我按照VFP的习惯省略了as,所以测试没有通过,今天加上了as,测试就通过了。
在此感谢所有关注过此贴的坛友!


[ 本帖最后由 hujj 于 2011-10-31 07:48 编辑 ]
1