按日期时间分组 - 显示数据库中有0个条目的分钟数?

时间:2017-02-03 10:17:17

标签: sql-server tsql datetime sql-server-2016

我正在尝试编写一个T-SQL查询,在一段时间内查找表中的条目数量,然后按分钟(条目/分钟)对它们进行分组。 但是我不能用0条目来显示会议记录。

我的查询如下:

select
[Minute],
Files
from
(
    select 
        (DATEDIFF(MINUTE, '2017-02-02 17:00:00.000', RegTime) / 1) as [Minute] ,
        count(*) as Files
            from TransferLog
            WHERE RegTime BETWEEN '2017-02-02 17:00:00.000' AND '2017-02-03 04:00:00.000'
        group BY
        (DATEDIFF(MINUTE, '2017-02-02 17:00:00.000', RegTime) / 1) 
) x  order by [Minute]

任何想法?

EDIT1。例外输出将显示分钟,表中没有条目。此外,当发生这种情况时,查询仍然无法使用,因为我无法知道哪一分钟没有数据。例如,如果我想要800分钟的数据但是20分钟没有数据写入表格,那么这只会显示780分钟的数据。有没有为此目的排序数据或修改查询?

Expected output:
Minute | Files
0   685
1   0
2   672
3   0
4   415
5   434
6   746

-

Current Output:
Minute | Files
0   685
1   672
2   415
3   434
4   746

1 个答案:

答案 0 :(得分:0)

您可以创建一个临时表,其中包含您需要的所有分钟数(从1到最大分钟)(例如使用this tecnique),然后您可以将临时表的数据表连接到空值用零。

因此,您应该将所有分钟列在您的值中,其他地方有数据和零。

以下是代码:

public class PagerAdapter extends FragmentStatePagerAdapter {

            private List<Fragment> listFragments;


            public PagerAdapter(FragmentManager fm, List<Fragment> listFragments) {
                super(fm);
                this.listFragments = listFragments;
            }

            @Override
            public Fragment getItem(int i) {
                return listFragments.get(i);
            }

            @Override
            public int getCount() {
                return listFragments.size();
            }
    }