我有一张包含大量客户ID的表格。在客户表中也是这些ID,但每个ID可以在同一客户的多个记录中。我想通过order by <my_field> desc
假设我在此表中有100个客户ID,而在customers表中有120条带有这些ID的记录(有些是重复的)。如何应用我的order by
条件才能获取最新的匹配记录?
dbms是sql server 2000.
表基本上是这样的: 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值,这是我想要检索的记录。
答案 0 :(得分:0)
使用查询中的聚合函数按客户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
的最大条目将是最近的条目。
答案 1 :(得分:0)
由于您没有提供真正的表和字段名称,因此这只是解决方案的伪代码。
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)
答案 2 :(得分:0)
您希望将ROW_NUMBER()函数与公用表表达式(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及更高版本。
答案 3 :(得分:-3)
通过使用时间和日期,我们可以为客户提取最新的详细信息。 使用您从中取出客户的日期和时间的列。
例如:
SQL&GT;选择ename,to_date(hiredate,'dd-mm-yyyy hh24:mi:ss')来自emp命令to_date(hiredate,'dd-mm-yyyy hh24:mi:ss');