[問題を解決してください...問題を解決しました!すべきではありません...] 私は過去24時間に私の新しいユーザーの数を取得しようとしています。ユーザーをリストアップすることでその数を確認したいのですが、同じクエリでなければならないものについて、2つの異なる結果が得られています。なぜCOUNT(*)は同じフィルタに対してSELECTと異なる番号を返しますか?
回答を検索しても見つからない場合、私はこれらの2つの異なるSQLクエリがなぜ同等のものでなければならないのか説明しません。
これらはどちらも同じPostgresデータベースに接続するRubyスクリプトです。
最初のクエリはカウントです:
cu = con.exec "SELECT count(*) AS user_count
FROM Users u
LEFT OUTER JOIN Personal_profiles p ON p.user_id = u.id
WHERE u.updated_at >= TIMESTAMP 'YESTERDAY 23:00:00' - INTERVAL '1 day'
AND u.updated_at < TIMESTAMP 'YESTERDAY 23:00:00'
AND u.approved_for_transfer"
user_count = cu.getvalue(0,0)
puts "Count of Users created in past 24 hrs:", user_count
次のクエリは類似したレコードのリストである138
の数を返します。
ru = con.exec "SELECT u.id,u.email, u.created_at::DATE, p.first_name,p.last_name
FROM Users u
LEFT OUTER JOIN Personal_profiles p ON p.user_id = u.id
WHERE u.created_at >= TIMESTAMP 'YESTERDAY 23:00:00' - INTERVAL '1 day'
AND u.created_at < TIMESTAMP 'YESTERDAY 23:00:00'
AND u.approved_for_transfer
ORDER BY u.created_at DESC"
puts "Users created in last 24 hr period (reverse chronological order):"
puts "user.id email created_at first_name last_name"
puts "------- ----- ---------- ---------- ----------"
ru.each do |row|
puts "%s %s %s %s %s" % [ row['id'], row['email'], row['created_at'], row['first_name'], row['last_name'] ]
しかし、このクエリのリターン最初の2行はヘッダーであるため、51行です。
私は両方のケースで同じ結合とフィルタを使用していると思いますが、なぜクエリが異なる結果を返すのか説明できれば大いに感謝します。
最初のクエリフィルタ上の他の 'created_at' –
'上の他のupdated_at'答え – Hogan