Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.16;
Скачать: CL | DM;

Вниз

запрос   Найти похожие ветки 

 
fifo   (2002-12-23 11:41) [0]

Помогите, плиз, составить запрос, возвращающий в указ. диапазоне дат, дату каждого дня месяца, даже если для нее нет записей в таблице и соотв. ей поле. Например:
tab1:
03.01.2002 134
06.01.2002 22
... ...
31.12.2002 11

Вернуть с 01.01.2002 по 31.12.2002:
01.01.2002 0
02.01.2002 0
03.01.2002 134
... ...
31.12.2002 11


 
MsGuns ©   (2002-12-23 11:46) [1]

ИМХО, без вспомогательной таблицы, содержащую список записей с одним-единственным полем, куда тупо занести в цикле все даты нужного периода не обойтись.
Либо уже в результирующую опять же просмотром добавить "нулевые"

Можно еще решить создание врем. НД через генератор, если БД серверная.


 
ЮЮ ©   (2002-12-23 11:50) [2]

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

01.01.02
...
31.01.02

и присоединиться к нему с помощью Left join


 
fifo   (2002-12-23 11:52) [3]

можно текст запроса, возвращающего последовательно все даты в указ. диапазоне?


 
ЮЮ ©   (2002-12-23 11:58) [4]

БД назови, у всех разные возможности для изврата :-)


 
fifo   (2002-12-23 11:59) [5]

Oracle


 
MsGuns ©   (2002-12-23 12:05) [6]

Procedure Form1.bbtGetAllDate(Sender: TObject);
var
dts,dte : Tdate;
begin
q.SQL.Clear;
q.SQL.Add("CREATE TABLE "TmpDate"");
q.SQL.Add(" (TmDate DATE) ");
try
q.Prepare;
q.ExecSQL;
except
ShowMessage("Сбой при выполнении запроса");
exit;
end;
dts := TDataTimePicker1.Date;
dte := TDataTimePicker2.Date;
q1.SQL.Clear;
q1.SQL.Add("SELECT * FROM "TmpDate");
q1.RequestLive := true;
try
q.Prepare;
q.Open;
except
ShowMessage("Сбой при выполнении запроса");
exit;
end;
with q1 do
while dts<=dte do
begin
Append;
Fields[0].AsDate := dts;
Post;
dts := dts+1;
end;
q1.FlushBuffers;
q1.Close;
end;


 
Mirovodin ©   (2002-12-23 13:01) [7]

Для SQL :

Declare @D1 datetime -- дата начала отсчета, например 01.01.2002
Declare @Count int -- кол-во дней от даты, например 30
Declare @I int -- счетчик

SET @I=0

CREATE TABLE #TEMP (ADate DateTime, ACount int)

WHile @Count>0
BEGIN
INSERT #TEMP (ADate, ACount, AProc) VALUES (@D1+@I, 0)
SET @I=@I+1
SET @Count=@Count-1
END


На выходе имеем таблицу :

ADate ACount int

01.01.2002 0
02.01.2002 0
...

Потом делаем :

UPDATE #Temp SET ACount=(Select Count(*) FROM XXX WHERE XXX)

SELECT * FROM #Temp

DROP TABLE #Temp


 
MsGuns ©   (2002-12-23 13:09) [8]

>Mirovodin © (23.12.02 13:01)

А что, разве нельзя 2 по сто в ОДИН стакан ? Ну в смысле заполнение счетчика оформить в инсерте ?


 
Mirovodin ©   (2002-12-23 13:16) [9]

Можно конечно, для нагладности так написал написал.



Страницы: 1 вся ветка

Текущий архив: 2003.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
4-49342
^Sanya
2002-11-28 21:14
2003.01.16
?


14-49235
Snake2000
2002-12-26 15:51
2003.01.16
Люди, помогите решить задачу !!!


6-49192
BuBuS
2002-11-16 21:23
2003.01.16
Сети и Интернет


1-49055
Dms
2003-01-08 11:50
2003.01.16
Ограничения размера INI файла


14-49234
hatchy
2002-12-26 12:58
2003.01.16
Label................................................