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) 支持

oracle 查看删除重复数据

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 两种表复制语句区别