select 多条记录基于 order by

select multiple records based on order by

我有一个 table 和一堆客户 ID。在客户 table 中也是这些 ID,但每个 ID 可以在同一客户的多个记录中。我想 select 最近使用的记录,我可以通过 order by <my_field> desc

获得

假设我在这个 table 中有 100 个客户 ID,而在客户 table 中有 120 个包含这些 ID 的记录(有些是重复的)。我如何应用我的 order by 条件来仅获取最新的匹配记录?

dbms 是 sql 服务器 2000。

table 基本上是这样的: loc_nbr 和 cust_nbr 是主键

一位顾客在位置 1 购物。他们被分配 loc_nbr = 1 和 cust_nbr = 1 然后 customer_id 的 1.

他们再次购物,但这次是在位置 2。所以他们被分配 loc_nbr = 2 和 cust_Nbr = 1。然后根据他们的其他属性分配相同的 customer_id 1比如姓名和地址。

因为他们在位置 1 之后在位置 2 购物,所以它将具有更新的 rec_alt_ts 值,这是我想要检索的记录。

在查询中使用聚合函数按客户 ID 分组:

  SELECT cust_Nbr, MAX(rec_alt_ts) AS most_recent_transaction, other_fields
    FROM tableName
GROUP BY cust_Nbr, other_fields
ORDER BY cust_Nbr DESC;

这假设 rec_alt_ts 每次都增加,因此 cust_Nbr 的最大条目将是最近的条目。

由于您没有给出真实的 table 和字段名称,这只是一个解决方案的伪代码。

select * 
from customer_table t2
inner join location_table t1 
  on t1.some_key = t2.some_key
where t1.LocationKey = (select top 1 (LocationKey) as LatestLocationKey from  location_table  where cust_id = t1.cust_id order by some_field)

通过使用时间和日期,我们可以为客户取出最近的详细信息。 使用您从中为客户取出日期和时间的列。

例如:

SQL> select ename , to_date(hiredate,'dd-mm-yyyy hh24:mi:ss') from emp order by to_date(hiredate,'dd-mm-yyyy hh24:mi:ss') ;

您想将 ROW_NUMBER() 函数与通用 Table 表达式 (CTE) 一起使用。

这是一个基本示例。您应该能够对您的数据使用类似的查询。

;WITH TheLatest AS
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY group-by-fields ORDER BY sorting-fields) AS ItemCount 
    FROM TheTable 
)
SELECT * 
FROM TheLatest 
WHERE ItemCount = 1

更新: 我刚刚注意到这是用 sql-server-2000 标记的。这仅适用于 SQL Server 2005 及更高版本。