嘿,我怎么能得到这句话的最新日期?
"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
答案 0 :(得分:2)
看来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
数据类型列中。永远不要将其存储为VARCHAR2
。
答案 1 :(得分:1)
您的日期列是字符串类型。您需要将列转换为日期,然后再转换回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)