【发布时间】:2014-09-22 11:33:05
【问题描述】:
我遇到了一个 SQL 问题,该问题涉及根据特定条件选择行。下面的示例表称为 'users' as u:
id category label date rank count
111 weak FFF 2014-06-01 1 4
111 strong DDD 2014-06-02 2 4
111 strong BBB 2014-06-03 3 4
111 weak RRR 2014-06-04 4 4
222 weak WWW 2014-07-01 1 3
222 weak YYY 2014-07-02 2 3
222 weak ZZZ 2014-07-03 3 3
有两个唯一 ID(111 和 222)。假设users.category == 'weak' 下的所有值(如ID 222),我想为每个distinct ID 检索最后一个u.label。
但是,如果users.category 下存在'strong',则返回与users.category == 'strong' 所在的最新 日期相对应的u.label。
基本上,我正在寻找以下内容:
id category label date
111 strong BBB 2014-06-03
222 weak ZZZ 2014-07-03
到目前为止,我尝试使用"where rank=count" 进行查询以获取最后一条记录,但我对如何选择u.label where category=='strong' 持空白,因为它的最后一条记录是u.category=='weak',如@ 987654336@.
谢谢,如果我能进一步澄清,请告诉我!
【问题讨论】:
-
你使用的是什么数据库/SQL引擎?
-
我正在使用 PostgreSQL -- 很抱歉省略了!
-
一条记录需要满足哪些条件才能被标识为最后一条记录?
-
因此您需要按
category对每个id组中的记录进行排名,然后将date降序排列,然后选择组中的第一条记录。 -
最后一条记录的获取方式有两种: 1、如果u.category=='weak'下的所有值都对应给定的ID,则选择u.date最近的记录(如ID 222 ) 2. 但是,如果给定 ID 的 u.category 下存在 'strong',请选择具有最新 u.date 和 u.category=='strong' 的记录(如 ID 111)
标签: sql postgresql select conditional-statements