mysql - 如何将数据插入 Tempdb 直到满足不同值的数量

标签 mysql sql sql-server

我有一个名为 tblorder 的主表。
它包含我关心的CUID(Customer ID)、CuName(Customer Name)和OrDate(Order Date)。 它目前按 date 升序排列(例如 2002 年之前的 2001)。

目标:
尝试检索最近 100 万个 DISTINCT 客户的 CUIDCuNameS,并将它们InsertTempdb(# Recent1M) 供以后加入使用。

所以我:

  1. 需要按 desc 排序以翻转日期以检索最近的 100 万客户

  2. 只需要前 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/

相关文章:

mysql - 关于从 SQL Server 更改为 MySql 的建议

php - 检查数据库数组中是否存在值不起作用

php - 如何在 Laravel 4.2 中计算 group by 结果的数量而不检索整组数据?

sql - 帮助删除 mysql 文件排序

sql - 关于表格修改的问题

sql-server - 在 SQL Server 中将 INT 分钟转换为 HOUR

PHP:抓取 SQL 结果并插入到 cookie 值中

php - 我的代码没有输出我的随机 mysql 查询。帮助?

sql - SQL Server varchar(max) 中的字符数?

sql-server - OUTER 应用不带子查询