如果设置满足条件的值,如何找到最近的日期*

时间:2014-02-18 17:50:27

标签: mysql sql

我一直在尝试构建一个sql查询,它从(表)中找到所选id的最新日期,以满足'type'在层次结构'vegetables'中的条件。我的目标是能够在每个id满足max(date)和层次结构条件时获得整行。

Example values
           ID        DATE         PREFERENCE  AGE
           123       1/3/2013     carrot      14
           123       1/3/2013     apple       12
           123       1/2/2013     carrot      14
           124       1/5/2013     carrot      13
           124       1/3/2013     apple       13
           124       1/2/2013     carrot      14
           125       1/4/2013     carrot      13
           125       1/3/2013     apple       14
           125       1/2/2013     carrot      13

我尝试了以下

SELECT *
FROM table 
WHERE date in
(SELECT  max(date) FROM (table) WHERE id in (123,124,125))
and preference in 
    (SELECT preference FROM (hierarchy_table) 
                       WHERE hierarchy = vegetables))
                       and id in (123,24,125)

但是它没有给出符合层次结构条件的每个id的最新日期。 (例如,在这种情况下,我只会得到id 124)

提前谢谢!

3 个答案:

答案 0 :(得分:1)

SELECT  max(date) FROM (table) WHERE id in (123,124,125)

为您提供所有日期的最长日期,您需要对它们进行分组。 尝试替换为:

SELECT  max(date) FROM (table) GROUP BY id

这样您就可以获得每个id的最长日期

答案 1 :(得分:1)

我想出来了。请参阅下面的查询作为示例:

SELECT * FROM (table) t 
WHERE t.date in 
(SELECT max(date) FROM table sub_t where t.ID = sub_t.ID and (date !> (currentdate))
and preference in
(SELECT preference FROM (hierarchy_table) WHERE hierarchy ='vegetables')
and ID in ('124')

答案 2 :(得分:0)

更改:

max(date) 

致:

-- if your date data is in mm/dd/yyyy
max( str_to_date( date, '%m/%d/%Y' ) )  

OR

-- if your date data is in dd/mm/yyyy
max( str_to_date( date, '%d/%m/%Y' ) )