如何按3列分隔行并获取排序行

时间:2015-05-07 18:39:07

标签: mysql sql

我有下表,

       sc_title      |      sc_date        | sc_coursecode | sc_courseno | sc_courseyear
------------------------------------------------------------------------------------------
    Open Water Diver | 2015-01-08 04:00:00 |       ow      |    05W      |    2015
    Open Water Diver | 2015-03-08 04:00:00 |       ow      |    05Z      |    2015
    Open Water Diver | 2015-04-08 04:00:00 |       ow      |    05W      |    2015
    Open Water Diver | 2015-05-18 04:00:00 |       ow      |    05W      |    2015
    Open Water Diver | 2015-05-09 04:00:00 |       ow      |    05Z      |    2015
    Open Water Diver | 2015-05-10 04:00:00 |       ow      |    05W      |    2015
    Open Water Diver | 2015-05-11 04:00:00 |       ow      |    05Z      |    2015
    Open Water Diver | 2015-05-12 04:00:00 |       ow      |    07W      |    2015
    Open Water Diver | 2015-05-13 04:00:00 |       ow      |    05Z      |    2015
    Open Water Diver | 2015-05-14 04:00:00 |       ow      |    07W      |    2015
    Open Water Diver | 2016-05-15 04:00:00 |       ow      |    07C      |    2016
        Bubble Maker | 2015-05-16 04:00:00 |       ow      |    07C      |    2015

我需要那些标题(sc_title)就像“开放水域潜水员”并且由3列sc_coursecode,sc_courseno,sc_courseyear区分的行,并且还只选择直接的未来日期行(sc_date)。所以我的意思是这样的,

       sc_title      |      sc_date        | sc_coursecode | sc_courseno | sc_courseyear
------------------------------------------------------------------------------------------
    Open Water Diver | 2015-05-10 04:00:00 |       ow      |    05W      |    2015
    Open Water Diver | 2015-05-09 04:00:00 |       ow      |    05Z      |    2015
    Open Water Diver | 2015-05-12 04:00:00 |       ow      |    07W      |    2015
    Open Water Diver | 2016-05-15 04:00:00 |       ow      |    07C      |    2016

我编写了以下查询,该查询几乎可以正常工作但不满足我的最终要求。获取包含未来日期(sc_date)的不同行。

SELECT sc_title,sc_date,sc_coursecode,sc_courseno,sc_courseyear 
FROM test_course WHERE DATE(sc_date) > DATE(NOW()) AND sc_title LIKE 'Open Water Diver%' 
GROUP BY sc_coursecode,sc_courseno,sc_courseyear ORDER BY sc_date ASC

如果有人可以帮助我,那就太棒了。提前致谢

2 个答案:

答案 0 :(得分:1)

由于您正在寻找最近的日期,请使用MIN上的sc_date选择最早的DATE(NOW())以上的SELECT sc_title , MIN(DATE(sc_date)) , sc_coursecode , sc_courseno , sc_courseyear FROM test_course WHERE DATE(sc_date) > DATE(NOW()) AND sc_title LIKE 'Open Water Diver%' GROUP BY sc_coursecode, sc_courseno, sc_courseyear ORDER BY sc_date ASC

sc_title

请注意,由于您没有按LIKE进行分组,因此当多个不同的标题与sc_title条件匹配时,您会在相应字段中获得任意匹配。要避免此问题,请将GROUP BY添加到{{1}}列表。

答案 1 :(得分:0)

Perhapsh之类的东西......(未经测试)

routes.rb