根据变量从多行中选择一个

时间:2016-11-10 02:16:47

标签: mysql sql tsql

伙计们你知道如何解决这个问题吗?

我撞到了一堵砖墙。我在报告后面编写代码。报告必须根据Colour变量显示FinancialYear

这是一个表格示例:

Table

CompanyID |   StartDate |    EndDate   | ReviewDate   | FinancialYear | Colour
      46  |  2012-01-18 |  2013-12-17  |  2013-12-15  |  2012         | Red
      46  |  2013-12-17 |  1900-01-01  |  2017-03-10  |  2014         | Red 
      46  |  2011-05-11 |  2012-01-17  |  2011-06-30  |  2014         | Orange  

当变量FinancialYear2016时,CompanyID应显示Colour RedEndDate'' 结果应显示第n行2

但是,如果FinancialYear变量为2012,我有两行符合条件,需要选择较大的EndDateStartDate,{ {1}}。 结果应显示第1行。

有人会知道怎么做吗?感谢您的任何反馈!

到目前为止我已尝试过:

Reviewdate

1 个答案:

答案 0 :(得分:0)

如果您只是在一行之后,那么您需要订购数据集,然后select top 1。您可以通过添加或删除字段并使用order by指定降序(默认为升序)来更改desc子句中数据集的排序方式:

declare @t table (CompanyID int
                    ,StartDate date
                    ,EndDate date
                    ,ReviewDate date
                    ,FinancialYear int
                    ,Colour nvarchar(50)
                    );
insert into @t values
 (46,'20120118','20131217','20131215',2012,'Red')
,(46,'20131217','19000101','20170310',2014,'Red')
,(46,'20110511','20120117','20110630',2014,'Orange');

declare @FinancialYear int = 2012;

select top 1 *
from @t
where FinancialYear = @FinancialYear
order by case when EndDate = '19000101'    -- Because you want 1900-01-01 to be seen as 'most recent',
                then '29990101'            -- you need to replace it with a value way into the future.
                else EndDate
                end desc;