我想知道一周中有多少天用户访问了我的网站。例如,一周中的每一天(一周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
答案 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