2009-06-30 3 views
0

Я хочу, чтобы получить одну запись до даты начала и даты окончанияКак получить одну запись до даты начала и даты окончания

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 & "'" 

Я хочу получить одну запись до даты и исправления

Я попробовал этот код

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. 

Я хочу, чтобы отобразить о ne записывать до даты выбора и даты окончания, а не за один день до этого, потому что моя таблица не является непрерывной датой.

ДОПОЛНИТЕЛЬНЫЙ ПРИМЕР:

Если у нас есть таблицы и строк [ID (INT), Value (Деньги)] и у нас есть несколько строк в нем

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

и мы хотим, чтобы сделать запрос, что получить каждый идентификатор строки, значение и предыдущую строку значение, в котором данные появляются, как следовать

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 CODE ИЛИ ACCESS QUERY HELP.

+0

Пожалуйста, может кто-нибудь помочь? – Gopal

+0

http://stackoverflow.com/questions/742226 и http://stackoverflow.com/questions/1067672 – colithium

+0

@Colithium - Я добавляю дополнительный пример, но не точные данные, что мне нужно – Gopal

ответ

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

Я не думаю, что дата окончания действительно имеет значение, если вы хотите «один перед записями между началом и окончанием»

Но если вы хотите, чтобы запись непосредственно перед датой начала и записью прямо перед end date, вы можете просто повторить вышеуказанный запрос с помощью edate вместо sdate.

Это то, что на самом деле означает запрос: выберите каждую запись с DATE перед этим (sdate). Для всех этих записей заказывайте их по DATE по убыванию (DESC). Верните только первый (LIMIT 1).

Примечание. Некоторые варианты реализации различаются. Возможно, вам понадобится «TOP 1» после слова «SELECT» вместо «LIMIT 1»

+0

Am Выбор даты между 20090101 по 20090601 и я использовал ваш запрос, но он показал запись до 20090101.Потому что вы использовали Gopal

+0

Я не уверен, что это значит, можете ли вы объяснить и привести примеры данных и что вы ХОТИТЕ им вернуться? (Измените свой вопрос) – colithium

+0

@Colithium - отредактировал мой вопрос, предоставил другой пример – Gopal

Смежные вопросы