这是我昨天问过的this问题的后续问题 我不知道是否应该扩展我原来的问题,我决定开始一个新问题(跟我一起......)
我的SELECT
目前是这样的:
SELECT *
FROM
(
SELECT
a.guid_column1, b.guidID_column1, c.date_column1, d.guid_column1
ROW_NUMBER() OVER (PARTITION BY a.guid_column1, b.guid_column1 ORDER BY c.date_column1 DESC) as rn
...
-- JOINS AND WHERE STUFF HERE
....
) t
WHERE t.rn = 1
我得到了这样的(预期)结果:
a.guid_column1 b.guid_column1 c.date_column1 d.guid_column1
-------------------------------------------------------------------
a1 b1 07/08/2013 someUniqueID
a2 b2 05/06/2012 someUniqueID
棘手的部分是我想用dateadd
对结果进行排序,类似ORDER BY dateadd(month, a.float_column, c.date_column1) asc
的{{1}}是{当然并不总是相同的(事实上是由用户稍后输入)。
有没有办法在SQL中实现这一点(我正在使用SQL Server 2005)
答案 0 :(得分:2)
下面的查询将计算SELECT-CLAUSE中的新日期。
如果a.float_column
为NULL
,则不会在原始日期添加任何内容。
SELECT dateadd(month, ISNULL(t.float_column,0), t.date_column1) as newDate
, *
FROM
(
SELECT
a.guid_column1, b.guidID_column1, c.date_column1, d.guid_column1, a.float_column
ROW_NUMBER() OVER (PARTITION BY a.guid_column1, b.guid_column1 ORDER BY c.date_column1 DESC) as rn
...
-- JOINS AND WHERE STUFF HERE
....
) t
WHERE t.rn = 1
ORDER BY newDate ASC
答案 1 :(得分:0)
为什么不将列添加到子查询中?
select *
from
(
select
a.guid_column1, b.guidID_column1, c.date_column1, d.guid_column1,
dateadd(month, a.float_column, c.date_column1) as sort_order,
row_number() over (partition by a.guid_column1, b.guid_column1 order by c.date_column1 desc) as rn
--
-- JOINS AND WHERE STUFF HERE
--
) t
where t.rn = 1
order by t.sort_order asc