如何在开始日期和结束日期之前获得一条记录

时间:2009-06-30 08:20:09

标签: vb6

我希望在开始日期和结束日期之前获得一条记录

DtpFrom means – 'date picker from
DtpTo means – 'date picker to

VB 6代码

sdate = DateToString(dtpFrom)
edate = DateToString(dtpTo)

QUERY

Where DATE BETWEEN '" & sdate & "' AND '" & edate & "'"

我希望在sdate和edate

之前获得一条记录

我试过这段代码

VB 6代码

s1sdate = -sdate
e1edate= -edate

QUERY

Where DATE BETWEEN '" & s1date & "' AND '" & e1date & "'"

但它会减去一天

示例

Selecting 03/05/2009 to 03/06/2009 from date picker, but it showing record from
02/05/2009 to 02/06/2009.

我想在选择日期和结束日期之前显示一条记录,而不是前一天,因为我的表格不是连续日期。

附加示例:

如果我们有一个表和行[ID(int),Value(Money)]并且我们有一些行

ID --Value
1------70 
2------100 
3------150 
8------200 
20-----250 
45-----280 

我们想要生成查询,获取每个行ID,值和上一行值,其中数据显示如下

ID --- Value ---Prev_Value 
1 ----- 70 ---------- 0 
2 ----- 100 -------- 70 
3 ----- 150 -------- 100 
8 ----- 200 -------- 150 
20 ---- 250 -------- 200 
45 ---- 280 -------- 250 

我做了以下查询,但我认为在大量数据中表现如此糟糕

select  t1.id, t1.value, t2.value  from  table  t1 inner join table  t2  on t1.id = t2.id where t2.value =  (select max(value)  from  table t where t.value< t1.value and t.id = t1.id ) and  T1.value BETWEEN '" & sdate & "' AND '" & edate & "'

需要VB 6代码或访问查询帮助。

1 个答案:

答案 0 :(得分:0)

SELECT * FROM whatever
WHERE DATE < sdate
ORDER BY DATE DESC
LIMIT 1

如果您想要“开始日期和结束日期之前的记录之前”,我认为结束日期并不重要

但是如果您希望记录在开始日期之前和记录在结束日期之前,您可以使用edate而不是sdate重复上述查询。

这就是查询的实际含义:在此之前选择DATE的每条记录(sdate)。对于所有这些记录,请按DATE以降序(DESC)对它们进行排序。只返回第一个(LIMIT 1)。

注意:某些实现方式各不相同。您可能需要在“SELECT”之后使用“TOP 1”而不是“LIMIT 1”