Firebird добавляет константу в возвращаемый столбец в запросе - PullRequest
0 голосов
/ 03 октября 2019

Я использую Firebird 2.5 или 3.0. У меня есть запрос, который объединяет одни и те же поля из двух идентичных подзапросов. Я хочу добавить фиксированное значение в столбец второго подзапроса, чтобы значения этого подзапроса гарантированно отличались от значений в тех же столбцах первого подзапроса:

    select Q1.* from (select VDATE, VTIME, STAT, PRICURR, SECCURR from "DevHistory"
                      where DEVID = :ID and VDATE = :DAY1 order by VDATE, VTIME) Q1
    union all
    select Q2.* from (select VDATE, VTIME + 1440, STAT, PRICURR, SECCURR from "DevHistory"
                      where DEVID = :ID and VDATE = :DAY2 order by VDATE, VTIME) Q2; 

VDATE - целочисленная юлианская дата,VTIME - это целое число минут с полуночи, а параметры :DAY1 и :DAY2 всегда являются двумя последовательными числами дня, следовательно, константа 1440 для второго подзапроса.

Синтаксис VTIME + 1440 неработа, конечно, но это то, чего я хотел бы достичь. Есть ли способ сделать это в запросе? Или я должен массировать данные после поиска?

1 Ответ

0 голосов
/ 04 октября 2019

Для запроса, как я его ввел, ответом будет то, что поле VTIME должно быть псевдонимом в обоих подзапросах, тогда запрос будет работать. При вводе я получаю ошибку -104 в части VTIME + 1440, но если я заменю первый саб на VTIME as MyTime, а второй на (VTIME + 1440) as MyTime, он будет работать нормально.

select Q1.* from (select VDATE, VTIME AS MyTime, STAT, PRICURR, SECCURR 
                  from "DevHistory"
                  where DEVID = :ID and VDATE = :DAY1 order by VDATE, MyTime) Q1
union all
select Q2.* from (select VDATE, (VTIME + 1440) AS MyTime, STAT, PRICURR, SECCURR 
                  from "DevHistory"
                  where DEVID = :ID and VDATE = :DAY2 order by VDATE, MyTime) Q2; 

Оболочкавыбор есть, потому что он жалуется на предложения order by, если я не делаю.

Параметры 2 :ID работают с FireDAC, оба заполняются идентификатором одного переданного устройства, установленным в Params [0]. Я не пробовал это в других библиотеках БД (у меня есть UniDAC, и я попробую это там, когда у меня будет шанс.)

...