0

SQLが特定の日付のすべてのレコードを返し、最新のレコードを一番上に表示したい(注文した列には日付と時刻の両方が含まれています-「5/21/201211:48:04AM」などのエントリが含まれています")。

私のSQL(下記)がこれを行うと思います。ただし、実際の結果は時間要素を無視します。それらは次のように返されます:

2012年5月21日10:48:04AM
2012年5月21日10:12:04AM
2012年5月21日9:48:04AM
2012年5月21日10:54:04AM
2012年5月21日11:48:04AM
..。

(IOW、返される結果は、時間要素に関する限り、ランダムに並べられています)

クエリは次のとおりです。

SELECT ENTRYDATE ENTERED, ENTEREDBYABC ABC
FROM 
   SomeTable v 
   LEFT JOIN SomeTable w ON v.someCol = w.someCorrespondingCol
WHERE
   ABC = :abc AND ENTRYDATE = trunc(sysdate) 
ORDER BY ENTERED DESC

アップデート

より具体的なクエリと結果:

これ(列とテーブルの名前が変更されました):

SELECT ENTRYDATE ENTERED, ENTEREDBYABCID ABCID, COMMENTS
FROM 
  WHITMAN.HOLLOWSKY@ATTORNEY v 
  LEFT JOIN ABCworker w ON v.enteredbyabcid = w.abcid
WHERE
  ABCID = 124393 AND ENTRYDATE = TRUNC(sysdate) 
ORDER BY ENTRYDATE desc

...次のレコードを返します:

ENTERED     ABCID   COMMENTS
5/21/2012   1234    At 1:36 PM, ...
5/21/2012   1234    At 1:36 PM, ...
5/21/2012   1234    At 9:23 AM, ...
5/21/2012   1234    At 11:07 AM, ...
5/21/2012   1234    At 11:12 AM, ...
5/21/2012   1234    At 1:42 PM, ...
5/21/2012   1234    At 11:02 AM, ...
5/21/2012   1234    At 9:19 AM, ...
. . .

もう一度更新

クエリで:

select entrydate from WHITMAN.HOLLOWSKY@ATTORNEY order by entrydate desc

私は得る:

5/21/2012 3:15:50 PM
5/21/2012 3:15:35 PM
5/21/2012 3:15:25 PM
5/21/2012 3:15:25 PM
5/21/2012 3:14:31 PM
5/21/2012 3:14:22 PM
5/21/2012 3:14:11 PM
. . .

IOW、それはうまく機能します。

「entrydate」がDateTime列であるかどうか-私はそう思いますが、テーブル構造を調べる特権がないので...?

4

2 に答える 2

3

問題は、結合しているテーブルの1つに「ENTERED」という列があることだと思います。

結果として、SELECTリストにない場合でも、その列で並べ替えます。これを修正するには、次のいずれかを実行する必要があります。

ORDER BY 1

また

ORDER BY ENTRYDATE

(2番目はGlennのコメントですでに言及されています。)

于 2012-05-21T19:41:00.910 に答える
2

あなたORDER BYは光栄です。問題は、述語を満たすために、選択している11行すべての時間コンポーネントが深夜でなければならないことです。

entrydate = TRUNC(sysdate) 

クエリ

SELECT ENTRYDATE ENTERED, ENTEREDBYABCID ABCID, COMMENTS
  FROM WHITMAN.HOLLOWSKY@ATTORNEY v 
       LEFT JOIN ABCworker w ON v.enteredbyabcid = w.abcid
 WHERE ABCID = 124393 
   AND ENTRYDATE = TRUNC(sysdate) 
 ORDER BY ENTRYDATE desc

entrydate今日の深夜にあるすべての行を要求してから、で並べ替えentrydateます。entrydate定義上、述語を満たす可能性のある値は1つしかないため、それORDER BYは関係ありません。11行すべての値はまったく同じであるentrydateため、その値で並べ替えると、任意の順序の結果が生成されます。Oracleは、正確に言えば、11行を任意の順序で返し、それでもORDER BY句を尊重することができます。

commentsおそらく、。ではなく、列に格納されている時間で注文したい場合がありentrydateます。entrydateおそらく、述語を変更して、今日のある時点 にあったすべての行を返すようにします。

AND trunc(entrydate) = trunc(sysdate)

おそらくあなたは何か他のことをしたいのでしょう。

于 2012-05-21T23:20:00.960 に答える