有点奇怪的问题。我正在查询保存文章的数据库。所有文章都有一个与它们相关的季节,因此它们可以在DB中出现不止一次的不同季节。当我选择文章& MAX季节,我没有得到正确的结果,让我相信逻辑没有到位,无法定义哪个季节是最近的等等(我只读过这个DB的访问权限)。例如,当选择一篇文章和MAX季节时,我得到的结果是,在实际检查源系统时,最大季节是SS2016,最大季节是FW16(春/夏,秋/冬)。但是,如果我使用MIN函数,则季节显示为FW16,这对于max是正确的,但是F在字母表中的S之前使我相信没有涉及日期时间逻辑...在SELECT语句中是否有任何方式,告诉查询SS始终小于FW。它总是SS或FF,然后是四位数年份,即FW2016& S2016。
查询如下:
SELECT ARTICLE_NUMBER,
MAX(SEASON)
FROM vw_GIM_Articles
WHERE ARTICLE_NUMBER = 'Q10176'
GROUP BY ARTICLE_NUMBER;
SELECT ARTICLE_NUMBER,
MIN(SEASON)
FROM vw_GIM_Articles
WHERE ARTICLE_NUMBER = 'Q10176'
GROUP BY ARTICLE_NUMBER;
结果是(按照上面的查询顺序):
ARTICLE_NUMBER ------------------ ------- Q10176 SS2016 (1 row(s) affected) ARTICLE_NUMBER ------------------ ------- Q10176 FW2016 (1 row(s) affected)
答案 0 :(得分:1)
SELECT TOP 1 ARTICLE_NUMBER,Season, SUBSTRING( SEASON,3,50)
FROM vw_GIM_Articles
WHERE ARTICLE_NUMBER = 'Q10176'
ORDER BY CONVERT( int, SUBSTRING( SEASON,3,50)) DESC ,
cast(CASE WHEN Season LIKE 'FW%' THEN 1 ELSE 0 END AS bit) desc
如果您想选择文章列表
试试这个,[SQL Fiddel Demo]
;WITH grouped AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ARTICLE_NUMBER
ORDER BY CONVERT( int, SUBSTRING( SEASON,3,50)) DESC ,
cast(CASE WHEN Season LIKE 'FW%' THEN 1 ELSE 0 END AS bit) desc ) AS rn
FROM vw_GIM_Articles
)
SELECT *
FROM grouped
WHERE rn = 1