Bonjour j'ai un tableau avec des colonnes:
* en utilisant Oracle
ID NUMBER
USER_ID NUMBER
DATE_ADDED DATE
DATE_VIEWED DATE
DOCUMENT_ID VARCHAR2
URL VARCHAR2
DOCUMENT_TITLE VARCHAR2
DOCUMENT_DATE DATE
Je veux savoir comment obtenir le document le plus récemment ajouté pour un utilisateur donné.
Select * FROM test_table WHERE user_id = value AND (do something with date_added column)
Merci
Select *
FROM test_table
WHERE user_id = value
AND date_added = (select max(date_added)
from test_table
where user_id = value)
Pas sûr de la syntaxe exacte (vous utilisez le type varchar2 qui ne signifie pas SQL Server donc TOP) mais vous pouvez utiliser le mot clé LIMIT pour MySQL:
Select * FROM test_table WHERE user_id = value
ORDER BY DATE_ADDED DESC LIMIT 1
Ou rownum dans Oracle
SELECT * FROM
(Select rownum as rnum, * FROM test_table WHERE user_id = value ORDER BY DATE_ADDED DESC)
WHERE rnum = 1
Si DB2, je ne sais pas si c'est TOP, LIMIT ou rownum ...
Avec SQL Server, essayez:
SELECT TOP 1 * FROM dbo.youTable WHERE user_id = 'userid' ORDER BY date_added desc
Vous n'avez pas spécifié ce que la requête doit renvoyer si plusieurs documents sont ajoutés en même temps, donc cette requête suppose que vous souhaitiez tous les renvoyer:
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;
Cette requête ne fera qu'un seul passage à travers les données.
En supposant que votre RDBMS connaît les fonctions de la fenêtre et que CTE et USER_ID sont l'ID du patient:
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;
J'ai supposé que vous vouliez trier par DOCUMENT_DATE, vous pouvez facilement changer cela si vous le souhaitez. Si votre SGBDR ne connaît pas les fonctions de la fenêtre, vous devrez faire une jointure:
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;
Ce serait bien de nous dire quel est votre SGBDR. Et cette requête sélectionne la date la plus récente pour chaque patient, vous pouvez ajouter une condition pour un patient donné.
Select Top 1* FROM test_table WHERE user_id = value order by Date_Added Desc