sql - 如何通过比较 A 列中具有相同值的记录中 B、C 列中的值来选择记录?

标签 sql postgresql

我想从我的 Postgres 数据库中选择满足以下条件的行:

  • A列中还有其他行具有相同的值
  • 那些其他行在 B 列中具有特定值
  • 那些其他行在 C 列中具有较大的值

所以如果我有这样一张表:

User | Item | Date
-----+------+------
Fred | Ball | 5/1/2015
Jane | Pen  | 5/7/2015
Fred | Cup  | 5/11/2015
Mike | Ball | 5/13/2015
Jane | Ball | 5/18/2015
Fred | Pen  | 5/20/2015
Jane | Bat  | 5/22/2015
搜索可能是“人们买了球后买了什么?”我想要的输出是:

User | Item | Date
-----+------+------
Fred | Cup  | 5/11/2015
Fred | Pen  | 5/20/2015
Jane | Bat  | 5/22/2015

我已经得到了 SELECT * FROM orders AS or WHERE or.user IN (SELECT or2.second_id FROM orders AS or2 GROUP BY or2.user HAVING count(*) > 1);,这给了我所有 Fred 和 Jane 的订单(因为他们订购了很多东西)。但是当我尝试对 WHERE 子句施加额外的限制时(例如 SELECT * FROM orders AS or WHERE or.item = 'Ball' AND or.user IN (SELECT or2.second_id FROM orders AS or2 GROUP BY or2.user HAVING count(*) > 1);,我得到的结果完全不是我所期望的——一个记录列表,其中 item = 'Ball' 似乎忽略了查询的第二部分。

感谢您提供的任何帮助。

编辑:抱歉,最后我通过描述我所采取的错误方法误导了一些人。 (我正在努力获取 Ball 购买 list ,我可以在下一步中将其用作子查询,但人们正确地注意到这是一种不必要的复杂/昂贵的方法。)

最佳答案

我认为这可能会给出您正在寻找的结果:

SELECT orders.user, orders.item, orders.date
FROM orders, (SELECT * FROM orders WHERE item = 'ball') ball_table
WHERE orders.user = ball_table.user AND orders.date > ball_table.date;

关于sql - 如何通过比较 A 列中具有相同值的记录中 B、C 列中的值来选择记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742364/

相关文章:

ruby-on-rails - Rails 控制台不会加载,因为扩展尚未构建。有任何想法吗?

sql - 为什么QueryRow()。Scan()在表中不为空时返回空字符串?

SQL Server-如何使 varchar 自动递增

PostgreSQL 多列索引未完全使用

未使用的 Postgresql 索引

node.js - 更改 Sequelize 时区

postgresql - 在生产环境中使用 postgres 进行数据挖掘 - 有更好的方法吗?

mysql - MYSQL 中的行计数

sql - 返回一个表中的所有行,并与另一个表中的行的子集匹配?

sql - Oracle SQL 中将两张表合并为一张