2016-07-28 12 views
0

userテーブルの値とテーブルの通知の最大値を比較する方法は?SQLはLEFT OUTER JOINの1つの最大IDフィールドを取得する

SELECT "vkId" AS "id" 
FROM "user" AS "user" 

LEFT OUTER JOIN "notification" ON "notification"."userId" = "user"."vkId" 

WHERE (
"user"."vipEnd" < 1469714507 
AND "user"."vipEnd" > 1469710907 
) AND (
(
    "notification"."type" = 4 
    AND 

    "notification"."expiresVipDate" < 1469710907 
) 
OR "notification"."id" IS NULL 
) 


LIMIT '100'; 
+0

ヒント:使用テーブルの別名! – jarlh

+4

サンプルデータと期待される結果がここで役立ちます。 '最大値 'が何であるかを決めるのは何ですか? – sgeddes

+3

LEFT JOINを実行すると、右側のテーブルの条件をON句に置き、真の左結合動作を取得します。 "id" IS NULL ...) – jarlh

答えて

0

あなたはexpiresVipDate DESCで並べ替え、そのためにDISTINCT ONを使用することがあります。今日の

SELECT DISTINCT ON (u."vkId") u."vkId" AS id, n.* 
FROM "user" AS u 
LEFT JOIN notification n ON (n."userId" = u."vkId" AND 
          n.type = 4 AND 
          n."expiresVipDate" < 1469710907) 
WHERE u."vipEnd" < 1469714507 AND u."vipEnd" > 1469710907 
ORDER BY u."vkId", n."expiresVipDate" DESC 
LIMIT 100; 
関連する問題