Office中国论坛/Access中国论坛

标题: ACCESS2007中怎么查询某数据倒数第二次出现的位置 [打印本页]

作者: bbjam    时间: 2014-7-6 18:40
标题: ACCESS2007中怎么查询某数据倒数第二次出现的位置
在这个ACCESS中,用first和last查询某商品第一次和最后一次的销售时间,所得到的结果刚好相反,是怎么回事?另外,我还想查询某商品倒数第二次销售的时间,应该怎么设计查询呢?如果查询倒数第N次的销售时间,又该怎么设计呢?请大神赐教!谢谢

作者: netguestcn    时间: 2014-7-7 06:16
[attach]54189[/attach]
作者: roych    时间: 2014-7-7 10:34
一般倒数第几条记录的做法是先建立一个降序的Top查询(例如,倒数第五条,就Top5),然后再按升序的方法列出第一条即可。如果需要一步到位的话,则把Top查询设置为子查询,详见附件。
作者: bbjam    时间: 2014-7-7 12:38
netguestcn 发表于 2014-7-7 06:16

谢谢




作者: bbjam    时间: 2014-7-7 12:38
roych 发表于 2014-7-7 10:34
一般倒数第几条记录的做法是先建立一个降序的Top查询(例如,倒数第五条,就Top5),然后再按升序的方法列 ...

谢谢




作者: bbjam    时间: 2014-7-8 09:37
netguestcn 发表于 2014-7-7 06:16

数据量稍微大了点,用dlookup查询就很慢,容易卡机
作者: roych    时间: 2014-7-8 10:46
bbjam 发表于 2014-7-8 09:37
数据量稍微大了点,用dlookup查询就很慢,容易卡机

域函数是这样的。建议用ADO好些。
作者: netguestcn    时间: 2014-7-9 06:17
按 roych 版主建议再修改(使用自定义函数):[attach]54201[/attach]
作者: roych    时间: 2014-7-9 12:31
本帖最后由 roych 于 2014-7-9 12:34 编辑
netguestcn 发表于 2014-7-9 06:17
按 roych 版主建议再修改(使用自定义函数):

写得已经很不错了,如果非要改的话,就用用Move代替循环吧。当然,如果不需要分组的话,代码会更简单些许。
  1. Public Function LastDate2(ByVal products As String) As Date
  2.     Dim Rs As New ADODB.Recordset
  3.     Dim strSQL As String, strWhere As String
  4.     Dim i As Integer

  5.     strWhere = "商品  = '" & products & "'"
  6.     strSQL = "select 销售日期 from 销售表 where " & strWhere

  7.     Rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  8.     'Rs.MoveFirst
  9.    
  10.     Rs.MoveLast             '最后一条。
  11.     Rs.MovePrevious       '倒数第二条。
  12.     LastDate2 = Rs.Fields(0)
  13.    ' For i = 1 To Rs.RecordCount
  14.    '     If Rs.Fields(0) > LastDate2 Then LastDate2 = Rs.Fields(0)
  15.    '     Rs.MoveNext
  16.     'Next i
  17.     Rs.Close
  18.     Set Rs = Nothing
  19. End Function
复制代码
另一段代码就不按此方式改改就好了。查询条件改一下:
[attach]54202[/attach]


作者: netguestcn    时间: 2014-7-9 21:51
本帖最后由 netguestcn 于 2014-7-9 22:13 编辑
roych 发表于 2014-7-9 12:31
写得已经很不错了,如果非要改的话,就用用Move代替循环吧。当然,如果不需要分组的话,代码会更简单些许 ...

roych 版主改得精辟
作者: zpy2    时间: 2014-7-11 05:43
roych 发表于 2014-7-9 12:31
写得已经很不错了,如果非要改的话,就用用Move代替循环吧。当然,如果不需要分组的话,代码会更简单些许 ...

不错!!!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3