Разные результаты запроса при одних условиях
#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
|