【发布时间】:2013-11-27 15:04:03
【问题描述】:
我有这个当前选择:
SELECT MIN(CONVERT(DateTime,SUBSTRING(NameAndDate,14,8))),
SUBSTRING(NameAndDate,1,12)
FROM MyData
WHERE pName IN (SELECT SUBSTRING(NameAndDate,1,12)
FROM MyData
GROUP BY SUBSTRING(NameAndDate,1,12)
HAVING COUNT(*) > 1)
GROUP BY SUBSTRING(NameAndDate,1,12)
SUBSTRING(NameAndDate,1,60) 是此人的 ID 名称,SUBSTRING(NameAndDate,61,8) 是他们进来的日期。
这个数据在表格中多次出现,这就是为什么我要选择 MIN 日期。
问题是我需要在表 (ID) 中添加另一列,但我不想按它进行分组,因为它会将重复项添加到 Person 的 ID。
有没有办法可以做到以下几点:
SELECT ID,
MIN(CONVERT(DateTime,SUBSTRING(NameAndDate,14,8))),
SUBSTRING(NameAndDate,1,12)
FROM MyData
WHERE pName IN (SELECT SUBSTRING(NameAndDate,1,12)
FROM MyData
GROUP BY SUBSTRING(NameAndDate,1,12)
HAVING COUNT(*) > 1)
GROUP BY SUBSTRING(NameAndDate,1,12)
编辑:
一个人可能经过多次:
ID | NameAndDate
----+-----------------------
1 | J60047238486 08162013
2 | J60047238486 08182013
3 | J60047238486 08242013
4 | J60047238486 09032013
5 | J60047238486 10102013
6 | C40049872351 05302013
7 | C40049872351 07212013
8 | C40049872351 07252013
我当前的选择拉动:
Name | Date
--------------+---------------------
J60047238486 | 08/16/2013 00:00:00
C40049872351 | 05/30/2013 00:00:00
但我想为这些特定行添加 ID 列:
ID | Name | Date
----+--------------+---------------------
1 | J60047238486 | 08/16/2013 00:00:00
6 | C40049872351 | 05/30/2013 00:00:00
【问题讨论】:
-
不,您必须以某种方式聚合它,或者按它分组。为什么 ID 列会破坏您的分组?除非它是某种代理键,在这种情况下,我不明白您为什么要在输出中使用它。
-
我将在问题中发布一个示例。
-
您要为每组
SUBSTRING(NameAndDate,1,60)选择哪个ID值? -
添加了一个编辑,希望能把事情弄清楚
标签: sql-server sql-server-2005 select group-by