可能是这个问题与stackoverflow无关。但这是我的问题,我不知道语法。 通过此查询,我选择按日期时间进行交易的人员。 这是我的疑问
我想编写选择他们的第一个TransactionsTimeStamp的查询?
答案 0 :(得分:3)
我认为您正在寻找排名函数,例如ROW_NUMBER
,您可以使用它们,例如Common Table Expression (CTE):
WITH CTE AS
(
SELECT ..., RN = ROW_NUMBER() OVER (PARTITION BY FirstName, LastName
ORDER BY TransactionsTimeStamp ASC)
FROM dbo.TableName ... (join tables here)
)
SELECT ....
FROM CTE
WHERE RN = 1
...
是您要选择的列,您可以选择全部,而不是GROUP BY
。
但是,如果您只想为每个用户选择TransactionsTimeStamp
- 列:
SELECT MIN(TransactionsTimeStamp) AS TransactionsTimeStamp, FirstName, LastName
FROM dbo.tableName ... (join tables here)
GROUP BY FirstName, LastName
答案 1 :(得分:2)
您的查询中的问题是您按日期列进行分组。因此,您将获得所有不同的日期值。您应该仅按FirstName和LastName进行分组,并将一些聚合函数应用于Date列。
如果只需要最短日期,那么您可以使用聚合函数获取该日期,如:
DECLARE @test TABLE
(
first_name NVARCHAR(MAX) ,
last_name NVARCHAR(MAX) ,
transaction_date DATETIME
)
INSERT INTO @test
VALUES ( 'A', 'B', '20150101' )
INSERT INTO @test
VALUES ( 'A', 'B', '20150120' )
INSERT INTO @test
VALUES ( 'C', 'D', '20150103' )
INSERT INTO @test
VALUES ( 'C', 'D', '20150119' )
SELECT first_name ,
last_name ,
MIN(transaction_date) AS min_transaction_date
FROM @test
GROUP BY first_name ,
last_name
输出:
first_name last_name min_transaction_date
A B 2015-01-01 00:00:00.000
C D 2015-01-03 00:00:00.000
答案 2 :(得分:1)
Select firstname, lastname, min(date) as minimum_date from clubprofile_cp
group by firstname, lastname