web-dev-qa-db-ja.com

SQL最新の日付項目を選択する方法

こんにちは、列のあるテーブルがあります:

* Oracleを使用

ID                  NUMBER
USER_ID            NUMBER
DATE_ADDED          DATE
DATE_VIEWED        DATE
DOCUMENT_ID        VARCHAR2
URL                VARCHAR2
DOCUMENT_TITLE      VARCHAR2
DOCUMENT_DATE        DATE

特定のユーザーに最後に追加されたドキュメントを取得する方法を知りたいです。

Select * FROM test_table WHERE user_id = value AND (do something with date_added column)

ありがとう

28
Matt
Select * 
FROM test_table 
WHERE user_id = value 
AND date_added = (select max(date_added) 
   from test_table 
   where user_id = value)
54
sh_kamalh

正確な構文は定かではありません(SQL Serverではないため、TOPを意味するvarchar2型を使用します)が、MySQLにはLIMITキーワードを使用できます。

Select * FROM test_table WHERE user_id = value
     ORDER BY DATE_ADDED DESC LIMIT 1

またはOracleのrownum

 SELECT * FROM
     (Select rownum as rnum, * FROM test_table WHERE user_id = value ORDER BY DATE_ADDED DESC)
 WHERE rnum = 1

DB2の場合、TOP、LIMIT、またはrownumかどうかわかりません...

13
gbn

SQL Serverの場合:

SELECT TOP 1 * FROM dbo.youTable WHERE user_id = 'userid' ORDER BY date_added desc

7
Noel Abrahams

同時に複数のドキュメントが追加された場合にクエリが返すものを指定していないため、このクエリでは、すべてのドキュメントが返されることを前提としています。

SELECT t.ID,
       t.USER_ID,
       t.DATE_ADDED,
       t.DATE_VIEWED,
       t.DOCUMENT_ID,
       t.URL,
       t.DOCUMENT_TITLE,
       t.DOCUMENT_DATE
FROM (
  SELECT test_table.*,
         RANK()
         OVER (ORDER BY DOCUMENT_DATE DESC) AS the_rank
  FROM   test_table
  WHERE  user_id = value
  )
WHERE the_rank = 1;

このクエリは、データを1回だけ通過します。

2
Jeffrey Kemp

RDBMSがウィンドウ機能とCTEおよびUSER_IDを知っていると仮定すると、患者のIDは次のようになります。

WITH TT AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY DOCUMENT_DATE DESC) AS N
    FROM test_table
)
SELECT *
FROM TT
WHERE N = 1;

DOCUMENT_DATEで並べ替えたいと思っていましたが、必要に応じて簡単に変更できます。 RDBMSがウィンドウ関数を知らない場合は、結合を行う必要があります。

SELECT *
FROM test_table T1
INNER JOIN (SELECT USER_ID, MAX(DOCUMENT_DATE) AS maxDate
            FROM test_table
            GROUP BY USER_ID) T2
    ON T1.USER_ID = T2.USER_ID
        AND T1.DOCUMENT_DATE = T2.maxDate;

ただし、RDBMSが何であるかを教えてください。また、このクエリはすべての患者の最新の日付を選択します。特定の患者の条件を追加できます。

2
Vincent Savard
Select Top 1* FROM test_table WHERE user_id = value order by Date_Added Desc
0
pavanred