如何在SQL Server中选择第一个插入的行?

时间:2015-01-20 08:24:34

标签: sql-server tsql

可能是这个问题与stackoverflow无关。但这是我的问题,我不知道语法。 通过此查询,我选择按日期时间进行交易的人员。 这是我的疑问 Selecting People who had transactions

我想编写选择他们的第一个TransactionsTimeStamp的查询?

3 个答案:

答案 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