2013-01-15 60 views
1

我有所謂的「run_date」中,我需要執行以下任務日期字段的表:,Postgres的查詢與日期提取

得到它具有((最先進的最新年值)和較早的)。

Example: 

run_date 
2012-12-24 
2012-12-31 
2013-01-03 
2013-01-07 
2013-01-14 

我需要返回「2013年1月3日」查詢,因爲它遵循上述規則。 我最好的嘗試是:

SELECT 
    run_date as val 
FROM 
    myTable 
    WHERE to_char(run_date, 'MM'::text) = (SELECT MAX(EXTRACT ('MONTH' FROM run_date)) FROM myTable) 
    and to_char(run_date, 'YYYY'::text) = (SELECT MAX(EXTRACT ('YEAR' FROM dado_dt_data_rodada)) FROM myTable) 

    ORDER BY val ASC LIMIT 1 

當然1-12之間的月週期,所以上面的查詢不起作用。 我感謝任何幫助,謝謝!

回答

1

我想你想要在最近一個月的最早日期。試試這個:

SELECT run_date as val 
FROM myTable 
ORDER BY to_char(run_date, 'YYYY-MM') desc, run_date asc 
LIMIT 1 
+0

我認爲它的工作原理!我想要的是*最近月份和年份*中的最早日期。因此,您首先按年份DESC對其進行排序,然後在ASC當天再次排序? – Fernando

+0

@Fernando。 。 。是的,這就是這樣做的。 'order by'的第一部分將最近一個月放在最前面。第二部分是本月最早的日期。 –

+0

太棒了!謝謝! – Fernando