如何按日期对不同组的行进行计数?

时间:2019-07-10 22:50:25

标签: sql-server tsql

抱歉,标题有点混乱。一点背景-我们有属于某些组的客户,这些客户可以随时在组之间进行更改。我正在尝试创建一个列,该列按时间顺序列出客户根据加入小组的日期以何种顺序加入的小组。

这是表格的样子: Cust_Tbl

public void onResume() {
    int width = getResources().getDimensionPixelSize(R.dimen.dialog_min_width);
    int height = getResources().getDimensionPixelSize(R.dimen.dialog_min_height);        
    getDialog().getWindow().setLayout(width, height);
    super.onResume();
}

这就是我想要的样子: Cust_Tbl2

| Account | Group | Join_Date  |
|---------|-------|------------|
| 1000    | 21    | 2007-07-22 |
| 1000    | 26    | 2017-03-08 |
| 1002    | 21    | 2014-06-19 |
| 1002    | 23    | 2019-01-01 |
| 1003    | 26    | 2005-10-05 |
| 1004    | 21    | 2018-05-07 |

如您所见,这些组按时间顺序枚举,按帐户划分。

我尝试了许多其他方法-包括一些在SO上其他地方找到的代码-

Alter table to add Identity column based on Order By

我对此还比较陌生,所以这对我来说并不完全容易理解(身份属性有问题,但这不是我的主要问题)

我能想到的最接近的东西是一个简单的窗口函数(这对我来说也是新的)。显然,这是行不通的,因为它没有按帐号分组。

| Account | Group | Join_Date  | Group_Order |
|---------|-------|------------|-------------|
| 1000    | 21    | 2007-07-22 | 1           |
| 1000    | 26    | 2017-03-08 | 2           |
| 1002    | 21    | 2014-06-19 | 1           |
| 1002    | 23    | 2019-01-01 | 2           |
| 1003    | 26    | 2005-10-05 | 1           |
| 1004    | 21    | 2018-05-07 | 1           |

到目前为止,我仍处于静止状态。任何帮助将不胜感激!

编辑:更新查询以匹配表

1 个答案:

答案 0 :(得分:2)

要获得预期的结果,只需添加[按帐户划分]:

select 
    *
    , ROW_NUMBER() over(partition by account order by [group]) as num 
from 
    Cust_Tbl

您使用了[按rate_str排序]。

我不知道[rate_str]是什么。我认为您可以按[组]使用订单

但是:

您需要澄清的一件事是:

例如,我为帐户1000添加了第三行:

| 1000    | 21    | 2007-07-22 |
| 1000    | 26    | 2017-03-08 |
| 1000    | 21    | 2017-02-08 |

您期望的组顺序是1,2,3还是1,2,2?

怎么样?

| 1000    | 21    | 2007-07-22 |
| 1000    | 21    | 2017-03-08 |
| 1000    | 26    | 2017-02-08 |