Форум: "Базы";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Вниззапрос Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c