我有一个名为 tblorder
的主表。
它包含我关心的CUID
(Customer ID)、CuName
(Customer Name)和OrDate
(Order Date)。
它目前按 date
升序排列(例如 2002 年之前的 2001)。
目标:
尝试检索最近 100 万个 DISTINCT 客户的 CUID
和 CuName
S,并将它们Insert
到 Tempdb
(# Recent1M) 供以后加入使用。
所以我:
需要按
desc
排序以翻转日期以检索最近的 100 万客户只需要前 100 万个 DISTINCT 客户信息(
CUID
,CuName
)
我知道下面的代码不正确,但这是主要思想。我只是想不出正确的语法。到目前为止,我将 While
循环与 Select
Into
作为最合理的解决方案。
SQL 平台:SSMS
Declare @DC integer
Set @DC = Count(distinct(CUID)) from #Recent1M))
While (@DC <1000000)
Begin
Select CuID,CuName into #Recent1MCus from tblorder
End
非常感谢,感谢您的帮助!
最佳答案
TOP 1000000 是可行的方法,但您将需要一个 ORDER BY 子句,否则您将得到任意结果。在你的情况下,你提到你想要最新的,所以:
ORDER BY OrderDate DESC
此外,您可以考虑使用 GROUP BY 而不是 DISTINCT。我认为它看起来更简洁,并使选择列表保持为选择列表,因此您可以选择包括您可能想要的任何其他内容(正如我冒昧地做的那样)。请注意,由于分组,ORDER BY 现在使用 MAX(ordate),因为客户可能有多个 ordate,而我们对最新的感兴趣。所以:
select top 1000000 cuid, cuname, sum(order_value) as ca_ching, count(distinct(order_id)) as order_count
into #Recent1MCus
from tblorder
group by cuid, cuname
order by max(ordate) desc
希望对您有所帮助。
关于mysql - 如何将数据插入 Tempdb 直到满足不同值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351458/