SQL查询以找出用户一周访问的天数

时间:2019-05-14 16:26:22

标签: sql

我想知道一周中有多少天用户访问了我的网站。例如,一周中的每一天(一周7天),一周中的1天,一周中的2天。

我认为最简单的方法是设置日期范围并找出该范围内的天数(选项1)。但是,理想情况下,我希望代码能理解一周,因此我可以在一个查询中运行多个星期(选项2)。我希望用户在每一天中都是唯一的(即访问过2天的用户也访问过1天,但只会在2天行中进行计数)

在我的数据库中(使用SQLWorkbench64),我有用户ID(id)和日期(dt)

我对SQL还是比较陌生,因此非常感谢您的帮助!

预期结果(基于总用户数5540):

Option 1:

Number of Days     Users
1                  2000
2                  1400
3                  1000
4                  700
5                  300
6                  100
7                  40

Option 2:

Week Commencing   Number of Days     Users
06/05/2019        1                  2000
06/05/2019        2                  1400
06/05/2019        3                  1000
06/05/2019        4                  700
06/05/2019        5                  300
06/05/2019        6                  100
06/05/2019        7                  40

2 个答案:

答案 0 :(得分:0)

您可以使用以下脚本在日期范围之间找到访问者人数。它还考虑如果访问者在给定日期范围内访问了多天,那么他/他将仅被计算为该日期范围内的最新日期-

注意:日期用作查询中的示例。

SELECT date,COUNT(id) 
FROM
(
    SELECT id,max(date) date
    FROM your_table
    WHERE date BETWEEN '04/21/2019' AND '04/22/2019'
    GROUP BY ID
)A
GROUP BY date

答案 1 :(得分:0)

您可以找到日期的星期几,然后按该日期分组。工作日结束后,会有一系列分组依据。这是我的操作方式:

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from 'material-ui/styles';
import AppBar from 'material-ui/AppBar'
import Tabs, { Tab } from 'material-ui/Tabs';
import Typography from 'material-ui/Typography';

const styles = theme => ({
  bigIndicator: {
    height: 5,
  },
});

class BasicTabs extends React.Component {
  state = { value: 0 }

  handleChange = (event, value) => {
    this.setState({ value });
  };

  render() {
    const { classes } = this.props;
    const {value} = this.state

    return [
      <AppBar position="static" key="appbar">
        <Tabs 
          classes={{ indicator: classes.bigIndicator }} 
          value={value}
          onChange={this.handleChange}
        >
          <Tab label="T1 Label 1" />
          <Tab label="T2 Label 1" />
          <Tab label="T3 Label 1" />
        </Tabs>
      </AppBar>,
      <div key="tab-content">
        {value === 0 && <Typography>Item One</Typography>}
        {value === 1 && <Typography>Item Two</Typography>}
        {value === 2 && <Typography>Item Three</Typography>}
      </div>
    ]
  }
}

BasicTabs.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(BasicTabs);


这是我的查询的输出:

DECLARE @table TABLE
(
    id INT,
    date DATETIME,
    MondayOfWeek DATETIME
)

DECLARE @info TABLE
(
    CommencingWeek DATETIME,
    NumberOfDays INT,
    Users INT
)

INSERT INTO @table (id,date) VALUES
(1,'04/15/2019'), (2,'07/21/2018'), (3,'04/16/2019'), (4,'04/16/2018'), (1,'04/16/2019'), (2,'04/17/2019')

UPDATE @table
SET MondayOfWeek = CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, date) - 6, date)), 101)

INSERT INTO @info (CommencingWeek,NumberOfDays) 
SELECT MondayOfWeek, NumberDaysInWeek FROM 
(
    SELECT id,MondayOfWeek,COUNT(*) AS NumberDaysInWeek FROM @table
    GROUP BY id,MondayOfWeek
) T1

SELECT CommencingWeek,NumberOfDays,COUNT(*) AS Users FROM @info
GROUP BY CommencingWeek,NumberOfDays
ORDER BY CommencingWeek DESC