2011-09-14 120 views
-1

表格中有一列(REC_CREATE_TIMESTAMP),以格式YY-MM-DD顯示日期。我想選擇某個日期的最新(按時間)(比如說2011年8月31日)。第一列應該是hh24:mm:ss中的時間戳,其餘的應該是該表的所有列(*)。我該怎麼做?SQL中日期的最近時間

使用Oracle 2.1.1.64

REC_CREATE_TIMESTAMP - NOT NULL - DATE

+1

您使用的是什麼RDBMS?什麼版本?你有什麼嘗試? – 2011-09-14 18:15:50

+1

什麼RDBMS? (SQL Server,MySQL,ORACLE等)以及REC_CREATE_TIMESTAMP字段的數據類型是什麼? – MatBailie

+0

Oracle 2.1.1.64。我不知道如何找出數據類型。請告知如何。 – Prostak

回答

1
SELECT * FROM Table WHERE REC_CREATE_TIMESTAMP IN 
( 
    SELECT 
     MAX(REC_CREATE_TIMESTAMP) as REC_CREATE_TIMESTAMP 
    FROM 
     Table 
    WHERE 
     TO_CHAR(REC_CREATE_TIMESTAMP, 'YYYYMMDD') = '20110831' 
) 

EDITED for Oracle

+0

這不會工作。你不應該由其他列組合 – Magnus

+0

它給了我幾行。我如何選擇最新的? – Prostak

+0

可以說,另一列是用戶名和PhoneNr,如果您通過分組,您將獲得具有相同PhoneNr的每個用戶的最新記錄。 – Magnus

-1

對於廣義的答案可以用數據,而不是個別日期的設置工作...

WITH 
    sequenced_data AS 
(
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY TRUNC(rec_create_timestamp) ORDER BY rec_create_timestamp DESC) AS daily_sequence_id, 
    TRUNC(rec_create_timestamp) as rec_create_date, 
    * 
    FROM 
    yourData 
) 
SELECT 
    * 
FROM 
    sequenced_data 
WHERE 
    daily_sequence_id = 1 
    AND rec_create_date = '20110831' 
+2

神聖煙燻......只因爲你***可以在你的披薩上點鳳尾魚並不意味着你***應該***! – Chains

+0

鳳尾魚的好處:它適用於一組日期,而不只是一個。 – MatBailie

+1

使它成爲'(PARTITION BY TRUNC(rec_create_timestamp))'和'TRUNC(rec_create_timestamp)作爲rec_create_date',然後你有oracle版本 –

0
SELECT * 
FROM tableName As tbl1 
WHERE EXISTS 
(
    SELECT NULL 
    FROM tableName as tbl2 
    WHERE 
    tbl2.rec_create_timestamp > '2001-08-30' 
    tbl2.rec_create_timestamp < '2001-09-01' 
    HAVING MAX(tbl2.rec_create_timestamp) = tbl1.rec_create_timestamp 
) 
+1

TOP 1在ORACLE中不起作用 –

+0

好的,刪除了TOP。如果兩個或更多記錄具有相同的最新日期,那麼現在您將獲得所有記錄。 – Magnus

+0

@Downvoter,關心評論? – Magnus

相關問題