[请忽略...问题解决了!不应该被要求...] 我想在过去的24小时内对我的新用户进行计数;我想通过列出用户来验证计数 - 但我得到了两个不同的结果,应该是相同的查询。为什么COUNT(*)返回的数字与SELECT相同?
在搜索答案并找不到答案后,我无法解释为什么这两个不同的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'] ]
但此查询返回53行,这是51条记录(因为前两行是标题)。
我相信我在两种情况下都有相同的连接和过滤器,但如果有人能解释为什么查询返回不同的结果,那将非常感激。
第一个查询过滤器上'updated_at'另一个在'created_at' –
的@ClodoaldoNeto作出这样的回答 – Hogan