Новейшая дата в оракуле sql - PullRequest
0 голосов
/ 14 декабря 2018

Хы, как я могу получить самую новую дату с этим оператором?

"SELECT MODEL, V_GODINA, DATUM_OSIGURANJA FROM EVP_V_KASKO_ZB EVP_1 WHERE 
EVP_1.OIB_OSIGURANIK = ? 
AND DATUM_OSIGURANJA = (SELECT MAX(DATUM_OSIGURANJA) FROM 
EVP_V_KASKO_ZB"
WHERE OIB_OSIGURANIK = EVP_1.OIB_OSIGURANIK)";

DATUM_OSIGURANJA является параметром даты, и результат - не самая новая дата, но дата с максимальным значением числа .. сбивает с толку .. какчтобы решить это?

20.06.2014
16.06.2018
11.06.2017
20.06.2015

это строки для сравнения

и это мой результат

20.06.2015

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Ваш столбец даты имеет вид строки.Вам необходимо преобразовать ваш столбец в дату, а затем преобразовать обратно в varchar2

SELECT MODEL, V_GODINA, DATUM_OSIGURANJA FROM EVP_V_KASKO_ZB EVP_1 WHERE 
EVP_1.OIB_OSIGURANIK = ? 
AND DATUM_OSIGURANJA = (SELECT TO_CHAR(MAX(TO_DATE(DATUM_OSIGURANJA))) FROM 
EVP_V_KASKO_ZB"
WHERE OIB_OSIGURANIK = EVP_1.OIB_OSIGURANIK)
0 голосов
/ 14 декабря 2018

Похоже, что DATUM_OSIGURANJA - это столбец VARCHAR2;это?Если это так, вам придется преобразовать его в DATE, а затем выбрать значение MAX.Примерно так:

SELECT e.model, e.v_godina, e.datum_osiguranja
  FROM evp_v_kasko_zb e
 WHERE     e.oib_osiguranik = '99999999994'      --> guess what? A valid OIB :)
       AND TO_DATE (e.datum_osiguranja, 'dd.mm.yyyy') =
              (SELECT MAX (TO_DATE (e1.datum_osiguranja, 'dd.mm.yyyy'))
                 FROM evp_v_kasko_zb e1
                WHERE e1.oib_osiguranik = e.oib_osiguranik);

Обратите внимание, что он разрушит индекс (если есть) на DATUM_OSIGURANJA (или вы должны создать индекс на основе функций).

Правильный вариант - изменить тип данных столбца.Всегда храните даты в столбце DATE datatype.Никогда не храните его как VARCHAR2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...