使用DATEDIFF在嵌套SELECT中添加新列

时间:2012-12-20 20:04:06

标签: sql select datediff

这里允许SQL新手,但我正在进行一个查询,其中请求变得更加复杂。很长一段时间,我有一个有几列的表。其中一个是日期栏。

我正在编写一个查询来返回一组列,同时根据日期范围添加一个新列(< = 90 Days,91-180,180 +)。这就是我到目前为止所拥有的。它适用于前90个,但我有一个很难的时间嵌套其他选择命令来获取其他数据集。

Select Key, Name, 'C90' as Code
From LD_List
WHERE DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90

我很感激帮助。

2 个答案:

答案 0 :(得分:1)

SELECT Key, Name,
   CASE WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90 THEN 'C90'
        WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 91 AND DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 180 THEN 'C180'
        WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 181 THEN 'C181'
   END AS Code

答案 1 :(得分:1)

如果您使用的是TSQL,SQL Server或MYSQL,CASE WHEN:Key是 resreved关键字。所以使用squre括号。在我的示例中,我使用了key作为id。

查询:SQL Server版本:

Select id, Name, 
case when DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90 
Then 'C90' 
when (DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 91 
and DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 180) 
then 'C180' 
else 'C181' 
end AS Code
From LD_List 

结果:

ID  NAME    CODE
1   john    C181
2   tim     C181
3   jack    C181
4   kate    C181
5   jim     C181
6   ron     C180
7   henry   C180
8   liza    C90

EXTRA:)

现在,如果您需要如下所示的支点:请检查此* SQLFIDDLE Demonstration out

结果:

CODE    PURCHASERS
C180    ron,henry
C181    john,tim,jack,kate,jim
C90     liza