我有交易日期,我想从小于或等于交易日期的最新生效日期获取数据。
这是我的桌子
transactiondate|effectivedate|unitprice
19-02-19 |01-01-19 | 36
19-02-19 |28-12-18 | 30
19-02-19 |15-12-18 | 20
这是我使用的查询
select A.unitprice, A.transactiondate, A.effectivedate
from A
where A.transactiondate >= A.effectivedate
这是我得到的结果
transactiondate|effectivedate|unitprice
19-02-19 |01-01-19 | 36
19-02-19 |28-12-18 | 30
19-02-19 |15-12-18 | 20
但是我想获取这些数据
transactiondate|effectivedate|unitprice
19-02-19 |01-01-19 | 36
我使用我的SQL服务器。请帮助我更正查询以获取所需数据。
答案 0 :(得分:0)
您可以尝试这个。
select A.unitprice, A.transactiondate, A.effectivedate
from A
where A.effectivedate = (select max(effectivedate) from A)
and A.effectivedate <= A.transactiondate;
答案 1 :(得分:0)
您的主要问题是您的日期不是MySQL认可的日期格式,因此您需要对其进行转换以进行比较。您还需要找到与以下日期进行比较的最大生效日期:
SELECT A.unitprice, A.transactiondate, A.effectivedate
FROM A
WHERE STR_TO_DATE(A.effectivedate, '%d-%m-%y') =
(SELECT MAX(STR_TO_DATE(effectivedate, '%d-%m-%y'))
FROM A
WHERE STR_TO_DATE(A.transactiondate, '%d-%m-%y') >= STR_TO_DATE(A.effectivedate, '%d-%m-%y'))
AND STR_TO_DATE(A.transactiondate, '%d-%m-%y') >= STR_TO_DATE(A.effectivedate, '%d-%m-%y');
输出:
unitprice transactiondate effectivedate
36 19-02-19 01-01-19
答案 2 :(得分:0)
首先,您需要按transactiondate获取有效日期的最大值,然后使用它来获取结果。
尝试以下查询
SELECT a.* FROM tran_date a INNER JOIN(
SELECT transactiondate,
MAX(effectivedate) AS max_date
FROM tran_date WHERE transactiondate > effectivedate
GROUP BY transactiondate
) AS b
ON a.transactiondate = b.transactiondate
AND a.effectivedate = b.max_date
在此,内部查询将按transactiondate返回最大生效日期,然后将结果与外部查询一起使用
答案 3 :(得分:0)