以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]快速获取数据库中日期的最大值和最小值  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=122126)

--  作者:188802386
--  发布时间:2018/7/19 13:34:00
--  [求助]快速获取数据库中日期的最大值和最小值

这是我获取日期的最大值和最小值的方法,
图片点击可在新窗口打开查看此主题相关图片如下:tim截图20180719133035.jpg
图片点击可在新窗口打开查看
但是耗时比较久,请问有没好的方法能快速获取最大最小日期

--  作者:有点甜
--  发布时间:2018/7/19 16:28:00
--  

参考这个做法 ExecuteValues,如果是最大max,如果最小min

 

Dim cmd As new SQLCommand
cmd.CommandText = "Select Sum(数量) As 数量, Sum(数量 * 单价) As 金额 from {订单} Where 产品 = \'PD01\'"
Dim Values = cmd.ExcuteValues
If Values.Count > 0 Then
    Output.show(Values("数量"))
    Output.show(Values("金额"))
End If

[此贴子已经被作者于2018/7/19 16:27:53编辑过]

--  作者:188802386
--  发布时间:2018/7/19 20:14:00
--  
Dim cmd As new SQLCommand
cmd.Con nectionName = 
cmd.Com mandText = "select max(year(结佣日)) as 最大结佣年,max(month(结佣日)) as 最大结佣月,min(month(结佣日)) as 最小结佣月 fr om {YW_佣金管理} Where Year(结佣日) = Year(GetDate()) " 
dt = cmd.Exe cuteReader() 
Dim ma As String = dt.compute("max(最大结佣月)")
Dim maa As String = dt.compute("max(最大结佣年)")
Dim su As String
For i As Integer = 1 To ma
su = su & ",sum(case when month(结佣日) = " & i & " then 已收佣金 else 0 end) as [" & i & "]"
Next
Dim s As String="SELECT max(_identify) as _identify,部门所属, 部门名称 " & su & " FR OM {YW_佣金管理} Where Year(结佣日) = " & maa & " GROUP BY 部门所属, 部门名称"
msgbox(s)

这种能统计到今年每自然月的佣金,但是我们不是以自然月算的,请问如何把
month(Case When Day(结佣日) > 28 Then DateAdd(d,3,结佣日) Else 结佣日 End)
放进sql里面去,使其统计统计从上月的29号只统计月的28日

--  作者:有点甜
--  发布时间:2018/7/19 20:29:00
--  

比如 max(year(结佣日))

 

就要改成,如 max(Year(Case When Day(结佣日) > 28 Then DateAdd(d,3,结佣日) Else 结佣日 End))

 

月份的也类似那样。如果还有问题,做个例子发上来测试吧。