我有一个表:
Comments (Id int identity primary key, PersonId Int(6), Comment1 Char(60))
字段Comment1
应该包含非必要的注释仅,然而该字段已被用于存储非必要的注释,但也用于存储格式为dd/mm/yyyy的重要日期。
* Id * PersonId * Comment1 *
| 1 | 5 | Likes Chocolate |
| 2 | 5 | 19/05/1992 |
| 3 | 5 | 23/07/1999 |
| 4 | 5 | 05/06/1994 |
| 5 | 8 | 07/12/1998 |
| 6 | 8 | Is very Tall |
| 7 | 8 | 24/05/1995 |
| 8 | 8 | 16/10/2002 |
| 9 | 11 | 13/11/2005 |
| 10 | 11 | 21/09/2000 |
| 11 | 11 | 8/99/100/23-1 |
SQL小提琴他们现在需要在Comment1
字段中为每个人找到包含最近日期的一行。
首先,我尝试使用以下查询删除那些不包含有效日期的行:
Select
Id,
PersonId,
Case
When IsDate(Comment1) = 1
Then convert(date, cast(rtrim(Comment1) as nvarchar), 103)
Else NULL
End
From Comments
但这只返回了我:
* Id * PersonId * Comment1 *
| 4 | 5 | 1994-06-05 |
| 5 | 8 | 1998-12-07 |
其他行为(null)
。这可以在SQL Fiddle链接中看到。
一旦这个选择语句返回我所需要的,我希望我应该能够使用聚合函数返回每个PersonId
的最近日期。
使用SET DATEFORMAT
set dateformat dmy
Select
Id,
PersonId,
Case
When IsDate(Comment1) = 1
Then convert(date, cast(rtrim(Comment1) as nvarchar), 103)
Else NULL
End
From Comments
SQL小提琴