select * from [table] where min(date) > 某个日期
Posted
技术标签:
【中文标题】select * from [table] where min(date) > 某个日期【英文标题】:select * from [table] where min(date) > certain date 【发布时间】:2020-07-21 03:50:27 【问题描述】:我和顾客有一张桌子。每个客户都有几个订单,其中包含支付的价格和他/她订购商品的日期。我只希望客户的第一个订单是在某个日期之后
订单表如下所示:
id | customer | item | price | date
--------------------------------------------
1 | a | a2 | 50 | 2018-07-03
2 | b | a5 | 30 | 2019-12-06
3 | c | a3 | 20 | 2020-01-14
4 | a | a2 | 23 | 2017-07-12
5 | f | a1 | 34 | 2018-10-03
6 | c | a1 | 90 | 2018-03-03
7 | b | a2 | 56 | 2020-02-03
8 | a | a2 | 52 | 2019-05-03
SELECT customer FROM orders WHERE min(date) > TO_DATE('2018-09-01', 'YYYY-MM-DD')
我只想要第一个订单在 2018-09-01 之后的客户,min(date) > TO_DATE('2018-09-01', 'YYYY-MM-DD')
结果应该是客户: b f
【问题讨论】:
用您正在使用的数据库标记您的问题。 【参考方案1】:使用聚合:
SELECT customer
FROM orders o
GROUP BY customer
HAVING min(date) > DATE '2018-09-01';
您无需将日期转换为字符串进行比较。根据您的数据库,可能不需要DATE
。
【讨论】:
我觉得DATE
不应该在里面?
由于 fabvy 没有明确说明正在使用哪个 RDBMS,Gordon 可能会根据 fabvy 帖子中的内容假设 RDBMS 是 Oracle。是的,需要 DATE。否则,您正在比较字符串。当然,fabvy 也没有说明日期列的数据类型是什么,谁知道呢。总体而言,问题措辞不佳。
@dougp 。 . . date
实际上是用于引入日期文字的标准 SQL。并非所有数据库都支持它。以上是关于select * from [table] where min(date) > 某个日期的主要内容,如果未能解决你的问题,请参考以下文章
SqlServer对select * from (select *from table) 支持
select into from 与insert into select from区别
Mysql select id from table1 and select count(id) from table2
相当于“SELECT * FROM (SELECT table_name FROM ...)”的东西?
oracle数据库表复制insert into select from跟create table as select * from 两种表复制语句区别