Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-49167
a_n_t
2002-09-27 14:05
2003.01.16
Проигрывание MOD


14-49240
hatchy
2002-12-26 13:20
2003.01.16
Как подругому свернуть окно?


7-49321
Tuman
2002-11-04 03:59
2003.01.16
как работать с PC Speaker`om?


6-49183
BuBuS
2002-11-17 22:22
2003.01.16
отправка данных по EMail


3-48938
_landy
2002-12-19 15:37
2003.01.16
TQuery & TStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский