如何编写sql代码以获取2个日期之间的数据?

时间:2019-03-21 04:16:20

标签: mysql sql

我有交易日期,我想从小于或等于交易日期的最新生效日期获取数据。

这是我的桌子

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服务器。请帮助我更正查询以获取所需数据。

4 个答案:

答案 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

Demo on dbfiddle

答案 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返回最大生效日期,然后将结果与外部查询一起使用

Demo

答案 3 :(得分:0)

这将起作用:

Timestamp

检查此:http://sqlfiddle.com/#!9/0bc3fc/9