2012-10-30 590 views
-1

我有存儲的日期一個事件表(M/d/Y)以下面的方式查詢到即將到來的日期第一排序,遞增,然後過去的日期,降

eventid  eventstart  eventend status 
---------------------------------------------- 
     1  10/9/2012  10/27/2012 Active 
     2  4/3/2012  4/27/2012 Active 
     3  10/26/2012  10/27/2012 Active 
     4  2/7/2012  2/9/2012 Active 
     5  10/30/2012  10/31/2012 Active 
     6  10/9/2012  10/31/2012 Active 
     7  11/9/2012  10/19/2012 Active 
     8  10/31/2012  10/18/2012 Active 

如果我有一個輸入日期例如2012年10月29日,然後我想按以下方式排序開始日期:

eventstart   
---------- 
10/30/2012 
10/31/2012 
11/9/2012 
10/26/2012 
10/9/2012 
10/9/2012 

任何人都可以幫助我嗎?

+0

「4/3」和「2/7」怎麼樣? –

回答

2

您可以通過order by子句中使用CASE syntax到這兩種情況分別進行排序:

SELECT * 
FROM `events` 
ORDER BY 
    CASE WHEN eventstart >= '2012-10-29' THEN eventstart ELSE '9999-12-31' END ASC, 
    CASE WHEN eventstart < '2012-10-29' THEN eventstart ELSE NULL   END DESC 

-- eventid | eventstart 
-- --------+----------- 
-- 5  | 2012-10-30 
-- 8  | 2012-10-31 
-- 7  | 2012-11-09 
-- 3  | 2012-10-26 
-- 1  | 2012-10-09 
-- 6  | 2012-10-09 
-- 2  | 2012-04-03 
-- 4  | 2012-02-07 
+0

喜日Thnx 4個query..i已經修改了這個查詢如下:SELECT * FROM 'event' ORDER BY CASE WHEN eventstart > = '10/29/2012'THEN eventstart ELSE '12/31/9999'END ASC, CASE WHEN eventstart <'10/29/2012'THEN eventstart ELSE NULL END DESC和輸出如下10/30/2012 \t 二〇一二年十月三十○日\t 2012年10月31日\t 2012年11月9日\t 2012年10月26日\t 2012年10月9日\t 2/7/2012 \t 2012年4月3日\t 能否幫助我 –

+0

除了最後兩個值之外,輸出看起來與您在問題中發佈的輸出類似。如果您將日期存儲爲VARCHAR,那麼這是一個_bad_想法。 –

0
select * from event where EXTRACT(MONTH FROM str_to_date(eventstart, '%d/%m/%Y'))>=EXTRACT(MONTH FROM str_to_date('10/29/2012', '%d/%m/%Y')) 
and eventstart >'10/29/2012' 
union 
select * from event where EXTRACT(MONTH FROM str_to_date(eventstart, '%d/%m/%Y'))>=EXTRACT(MONTH FROM str_to_date('10/29/2012', '%d/%m/%Y')) 
and eventstart <'10/29/2012' 
+0

yh感謝您的查詢frnd.But在執行時顯示語法錯誤。 –

+0

確定我西港島線檢查和更新 – AnandPhadke

+0

嘗試此更新的查詢 – AnandPhadke

1

在一個非常示意方式:

select * from tablename where eventstart >= '10/29/2012' order by eventstart asc 
union 
select * from tablename where eventstart < '10/29/2012' order by eventstart desc 

第一行會得到尚未啓動的事件,下令上升,而第三個會得到休息。

然後,你應該設法真正這些日期與SQL函數左右進行比較,以決定是否要在今天包括作爲未開始事件或作爲過去事件。我發佈了第一個案例。如果你今天想成爲一個過去的事件,從第一比較刪除等符號,並將其移動到第二個:

select * from tablename where eventstart > '10/29/2012' order by eventstart asc 
union 
select * from tablename where eventstart <= '10/29/2012' order by eventstart desc 
相關問題