以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何加载每个客户的最新一条订单?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=53074)

--  作者:ehomecd
--  发布时间:2014/6/28 23:05:00
--  如何加载每个客户的最新一条订单?
请教一个问题:订单表里,有n个客户,每个客户有n条记录,我如何加载每个客户的最新一条记录,代码应该如何写? 也就是说每个客户只筛选一条最新添加的记录,订单表有“客户姓名”和“订单日期”字段。

--  作者:pyh6918
--  发布时间:2014/6/29 0:17:00
--  

增加一列【标志列】,字符型

 

Dim mns As List(Of String) = DataTables("订单").GetUniqueValues("", "客户姓名")
DataTables("订单").LoadFilter=""
DataTables("订单").Load()
For Each dr As DataRow In DataTables("订单").DataRows
    dr("标志列")=""
Next
Dim h As DataRow
For Each mn As String In mns
    h = DataTables("订单").Find("客户姓名=\'" & mn & "\'","订单日期 Desc")
    If h IsNot Nothing Then \'如果找到的话
        h("标志列")="ok"
    End If
Next
DataTables("订单").LoadFilter="标志列=\'ok\'"
DataTables("订单").Load()


--  作者:有点甜
--  发布时间:2014/6/29 9:09:00
--  

Dim mns As List(Of String) = DataTables("订单").SQLGetValues("", "客户姓名")

Dim idxs As String = ""
For Each mn As String In mns
    Dim dr As DataRow = DataTables("订单").SQLFind("客户姓名=\'" & mn & "\'","订单日期 Desc, [_Identify] desc")
    idxs &= dr("_Identify") & ","
Next

DataTables("订单").LoadFilter="[_Identify] in (" & idxs.TrimEnd(",") & ")"
DataTables("订单").Load()


--  作者:2
--  发布时间:2014/6/29 9:27:00
--  

dim sql as string

sql="SELECT E.客户ID,O.订单ID FROM 客户表 AS E  CROSS APPLY (SELECT TOP(1)* FROM 订单表 AS O1 WHERE E.客户ID = O1.客户ID ORDER BY O1.订单日期 DESC,O1.订单ID DESC ) AS O"


DataTables("订单表").SQLLoad(sql)
[此贴子已经被作者于2014-6-29 10:23:33编辑过]

--  作者:2
--  发布时间:2014/6/29 9:52:00
--  
WITH 订单 AS (
 SELECT n=ROW_NUMBER() OVER(partition BY 客户姓名 ORDER BY 订单日期 desc,订单ID desc),* FROM 订单表
)
SELECT * FROM 订单 WHERE n=1;


[此贴子已经被作者于2014-6-29 9:59:18编辑过]