| 
Разные результаты запроса при одних условиях 
    
           
    
    #40138714
    
    
        Ссылка: Ссылка на сообщение: Ссылка с названием темы: Ссылка на профиль пользователя: Ссылка на вложение: Ссылка на вложение 2: | 
|  | 
|  | 
| Доброго времени суток! 
Когда жестко задаю дату в запросе (в BETWEEN), выдает нужную мне выборку (запрос максимально упрощен и может выглядеть глупо, но суть проблемы отражает) 1.2.
 3.
 4.
 5.
 6.
 7.
 8.
 9.
 10.
 11.
 12.
 13.
 14.
 15.
 16.
 17.
 18.
 19.
 20.
 21.
 22.
 23.
 
 Drop table temp_table;
CREATE  TABLE temp_table (dValueTag double precision, dateReport timestamp, dateStartInterval timestamp, dateEndInterval timestamp, strNameTag text, dateValueTag timestamp);
do $$
declare iIter integer:= 0;
declare dValueTag double precision:= NULL;
declare dateReport timestamp:= '2024-07-22 00:00:00';
declare dateValueTag timestamp:= NULL;
declare strNameTag text:= '_';
declare iDay int:= (date_part('day', dateReport));
begin
 while iIter < iDay  loop
SELECT
h.valdouble,  h.time, n.tagname
INTO dValueTag, dateValueTag, strNameTag FROM  nodes_history h JOIN  nodes n ON n.NodeId = h.NodeId
WHERE n.TagName = 'ASRMB.U_AVT12.FT0038.Out.Mt' AND (h.time BETWEEN ('2024-07-22 00:00:00') AND ('2024-07-23 00:00:00')) AND h.recordtype != 'ubound' ORDER BY h.time DESC LIMIT 1;
INSERT INTO temp_table VALUES (dValueTag, dateReport, ('2024-07-22 00:00:00'), ('2024-07-23 00:00:00' ), strNameTag, dateValueTag);
iIter = iIter + 1;
end loop;
end $$;
select * from temp_table
Выборка:
 
Если задаю туже самую дату через переменную 1.
 declare dateReport timestamp:= '2024-07-22 00:00:00';
получаю странный результат! 
Начиная с 6-ой строки. 1.2.
 3.
 4.
 5.
 6.
 7.
 8.
 9.
 10.
 11.
 12.
 13.
 14.
 15.
 16.
 17.
 18.
 19.
 20.
 21.
 22.
 23.
 
 Drop table temp_table;
CREATE  TABLE temp_table (dValueTag double precision, dateReport timestamp, dateStartInterval timestamp, dateEndInterval timestamp, strNameTag text, dateValueTag timestamp);
do $$
declare iIter integer:= 0;
declare dValueTag double precision:= NULL;
declare dateReport timestamp:= '2024-07-22 00:00:00';
declare dateValueTag timestamp:= NULL;
declare strNameTag text:= '_';
declare iDay int:= (date_part('day', dateReport));
begin
 while iIter < iDay  loop
SELECT
h.valdouble,  h.time, n.tagname
INTO dValueTag, dateValueTag, strNameTag FROM  nodes_history h JOIN  nodes n ON n.NodeId = h.NodeId
WHERE n.TagName = 'ASRMB.U_AVT12.FT0038.Out.Mt' AND (h.time BETWEEN dateReport AND ('2024-07-23 00:00:00')) AND h.recordtype != 'ubound' ORDER BY h.time DESC LIMIT 1;
INSERT INTO temp_table VALUES (dValueTag, dateReport, dateReport, ('2024-07-23 00:00:00' ), strNameTag, dateValueTag);
iIter = iIter + 1;
end loop;
end $$;
select * from temp_table
Выборка:
 | 
| 
Изменено: 26.07.2024, 09:51 - qwerty5000 |