统计mysqal数据库中与某个日期相关的多个值
本文关键字:日期 统计 数据库 mysqal | 更新日期: 2023-09-27 18:27:32
我正在为办公室内部使用构建C#winforms应用程序。我的主表中有10多列,40多个用户更新了不同的值。
作为的一个例子
user1用名称、loantype、loannumber更新了表user2用名称、贷款类型、贷款编号更新了表
每行中用时间戳列值记录的时间和日期
这是我的数据库设计
+---------+------+-------------+---------------------+
| loanid | type | name | timestamp | and more 8 columns left >>
+---------+------+-------------+---------------------+
| 1 | new | diana | 2014-10-02 14:59:21 |
| 2 | new | diana | 2014-10-03 09:05:09 |
| 3 | sec | smith | 2014-10-03 09:05:09 |
| 4 | new | kim | 2014-10-03 09:06:23 |
| 5 | new | kim | 2014-10-03 09:22:34 |
| 6 | new | katie | 2014-10-03 09:35:23 |
| 7 | sec | kim | 2014-10-03 10:03:08 |
| 8 | sec | diana | 2014-10-03 10:20:15 |
+---------+------+-------------+---------------------+
作为一个例子,我想计算戴安娜今天有多少新贷款和多少sec贷款,并将其显示在datagridview 上
因此,我想计算另外8列中的值,并显示datagridwire
例如,我在另一列中有颜色(黑色、白色)
我想计算戴安娜今天输入了多少黑色值,并在一个数据网格视图中显示戴安娜今天更新了多少新贷款和多少白色Lona
我尝试过这个,但它一次只检索一个值
SELECT name,type, COUNT(*) FROM loans
where type= 'new '
GROUP BY name, type;
我只想展示今天的主菜。并且应该使用日期时间选择器选择日期
无论如何,我设法计算了我所有的项目这个代码
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `allcounter`()
BEGIN
SELECT username, COUNT(IF(status='hold',1,null)) 'hold',
COUNT(IF(status='complete',1,null)) 'complete',
COUNT(IF(loantype='fha',1,null)) 'fha',
COUNT(IF(loantype='ca',1,null)) 'ca',
COUNT(IF(loantype='idf',1,null)) 'idf',
COUNT(IF(loantype='slan',1,null)) 'slanl',
COUNT(IF(status='hold',1,null)) 'hold',
COUNT(IF(status='complete',1,null)) 'complete',
COUNT(IF(status='route',1,null)) 'route',
COUNT(IF(status='route(*)',1,null)) 'route(*)',
COUNT(IF(neworsecond='new',1,null)) 'new',
COUNT(IF(neworsecond='Second',1,null)) 'Second'
FROM loans
WHERE DATE(submittimestamp) = DATE(@p)
group by username;
END
但现在我想过滤我的结果等于我的表单中的日期时间选择器。我在我的dtp中使用了短格式(2014年10月23日),在我的数据库中我像这样存储时间(2014-10-23 10:20:15)。我实现了以下方法,但它不起作用
string constring = string.Format("datasource='{0}';port='{1}';database='{2}';username=uwadminview;password=**************;Connect Timeout=180;Command Timeout=180", dbserverip.Text, portnumber.Text, dbname.Text);
MySqlConnection conwaqDatabase = new MySqlConnection(constring);
MySqlCommand cmdwaqDatabase = new MySqlCommand("call allcounter DATE(@p)", conwaqDatabase);
DateTime dateTimeValue = tdtp.Value;
cmdwaqDatabase.Parameters.AddWithValue("@P", dateTimeValue);
try
{
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmdwaqDatabase;
dbdataset = new DataTable();
sda.Fill(dbdataset);
reportingDGV.DataSource = dbdataset;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
conwaqDatabase.Close();
有人能告诉我如何解决这个新问题吗?
最后,我统计了到某个日期为止的所有用户记录。使用日期作为参数直接从表单调用mysql过程
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `allcounter`(IN datestamp DATE)
BEGIN
SELECT username,
COUNT(IF(status='hold',1,null)) 'hold',
COUNT(IF(status='complete',1,null)) 'complete',
COUNT(IF(status='route',1,null)) 'route',
COUNT(IF(status='route(*)',1,null)) 'route(*)',
COUNT(IF(loantype='fha',1,null)) 'fha',
COUNT(IF(loantype='va',1,null)) 'va',
COUNT(IF(loantype='grh',1,null)) 'grh',
COUNT(IF(loantype='conventional',1,null)) 'conventional',
COUNT(IF(purpose='Refinance',1,null)) 'Refinance',
COUNT(IF(purpose='Purchase',1,null)) 'Purchase'
FROM loans
WHERE DATE(submittimestamp) = datestamp
group by username;
END