sql - 如何根据两列和最小函数选择此行

标签 sql db2

我非常感谢为此编写选择查询的所有帮助。

我的表格

 sw_id | url_id |  open_date   | valid
----------------------------------------
  101  |  com   |  2013-01-01  |  1
  202  |  net   |  2013-01-02  |  1
  202  |  net   |  2013-02-02  |  1 
  303  |  com   |  2013-01-03  |  1 
  303  |  com   |  2013-02-03  |  1 
  303  |  com   |  2013-03-03  |  1 
  404  |  org   |  2013-01-04  |  1 
  404  |  org   |  2013-02-04  |  1 
  404  |  gov   |  2013-02-04  |  1
  404  |  gov   |  2013-04-04  |  1 
  ...

We need to find the valid (valid=1) rows where same sw_id, url_id got less open_date.

select query should output the rows from above something like this:

查询输出

 sw_id | url_id |  open_date   | valid  |  min_open_d 
-----------------------------------------------------
  202  |  net   |  2013-02-02  |  1     |  2013-01-02
  303  |  com   |  2013-02-03  |  1     |  2013-01-03
  303  |  com   |  2013-03-03  |  1     |  2013-01-03
  404  |  org   |  2013-02-04  |  1     |  2013-01-04
  404  |  gov   |  2013-04-04  |  1     |  2013-02-04

如您所见,我们仅选择 open_date 高于最低值 min(open_date) 的行。

希望您通过上面的描述了解问题所在。

最佳答案

如果您也在这里展示自己的努力,那就太好了,但基本上子查询是(最容易让新手理解的)方法之一。

SELECT
    sw_id,
    url_id,
    open_date,
    valid,
    (
        SELECT MIN(open_date)
        FROM MyTable t2
        WHERE t2.sw_id = t1.sw_id GROUP BY t2.sw_id
    ) AS min_open_d
FROM
    MyTable t1
WHERE
    valid = 1
ORDER BY
    open_date DESC

关于sql - 如何根据两列和最小函数选择此行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571223/

相关文章:

python - 在 python 2.7.5 中使用来自 cx_Oracle 模块的函数 callproc 执行脚本

mysql - MySQL 中的上一行值

mysql - 将两行合并为一行 - 肮脏且缓慢的过程

db2 - 是否有任何开源DB2客户端?

SQL。有什么有效的方法来找到第二低的值?

sql - 检查(并删除)SQL Server 中的复杂对象重复项

sql - 自助加入获取员工经理姓名

db2 - 正则表达式 IBM DB2 iSeries

db2 - 在 DB2 SQL 中,如何终止已经陷入无限循环的递归函数调用?

sql - 如何将表连接到自身并在 SQL 中选择最大值