Как сделать поиск определенного значение в строке отобранной SELECT * FROM?
Добрый день,
В pgadmin делаю запрос к таблице бд вида SELECT * FROM archiv WHERE datatime = (SELECT MAX(datatime) FROM archiv) который возвращает мне 1 строку с последней датой записи(столбец datatime типа timestamp). Мне необходимо в этой строке найти столбец в котором есть определенное значение к примеру 10. Столбцы разных типов. Как мне это сделать в виде запроса?
который возвращает мне 1 строку с последней датой записи
Это неверно. Если имеется несколько записей с одинаковым и в то же время максимальным временем - выведутся все.
Вообще разумнее использовать
SELECT *
FROM archiv
ORDER BY datatime DESC
FETCH FIRST 1 ROW /* ONLY | WITH TIES */;
Мне необходимо в этой строке найти столбец в котором есть определенное значение к примеру 10.
Это точное и полное значение, которое нужно найти? Или это может быть и подстрока? И вообще - оно числовое или строковое? А искать надо во внутреннем представлении или в отображаемом значении?
И что надо найти - имя столбца, точное значение в нём, или просто проверить на есть/нет?
Столбцы разных типов
Значит, выполните явное приведение типа для каждого столбца к нужному типу.
col1, 2, 3 я так понимаю это название столбцов? Проблема в том что столбцов от 300 до 700 с разными названиями в раных таблицах. обще у таблиц ключ datatime.
Turist1971, задача попахивала и до этого уточнения. Вы из БД Ёксель сделали, похоже.
Тут надо не запросы городить, а сделать нормализацию и хранить единообразно то, что единообразно обрабатывается.
БД по сути архив параметров поступающих из вне(что то типа черный ящик). Название столбцов это название параметров. Запрос нужен по сути периодически чтобы по быстрому найти пропуски в записи(условно в столбце будет 0 значит проблема)
Turist1971, почему бы тогда не сделать при записи еще одно поле, в котором один раз определяется, есть в прочих столбцах нули или нет? Или собственно в момент записи и обрабатывать такую ситуацию.
Выдает ошибку
ERROR: syntax error at or near ")"
LINE 1: ...TION_SCHEMA.COLUMNS WHERE TABLE_NAME = `archiv`)
Если поставить " То выдает другую
ERROR: operator does not exist: information_schema.sql_identifier = archiv
LINE 1: ... FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "archiv...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
SELECT *
FROM archiv,
json_each(row_to_json(archiv))
WHERE json_each.value :: text LIKE '%10%'
AND json_each.key <> 'id'
/* AND условия по таблице archiv */;