我正在尝试每天保存总文档。但我不知道怎么做。 以下是我的数据库中的列以及它们的数据。
report_id doc_date total_doc
- 1 2017-06-06 1
- 2 2017-06-23 1
- 3 2017-06-14 1
- 4 2017-06-12 1
- 5 2017-06-16 1
- 6 2017-06-21 1
- 7 2017-06-14 1
- 9 2017-06-13 1
- 10 2017-06-21 1
- 11 2017-06-12 1
- 12 2017-06-18 1
- 13 2017-06-12 1
.....
上面有相似的日期,例如
- 3 2017-06-14 1
- 7 2017-06-14 1
我需要一个sql查询来计算并显示每天的总文档保存量。因此,2017年6月14日,总数将为2。 伙计们好吗? 仅供参考,total_doc自动等于1。 的更新 并显示当天的总文件保存。
答案 0 :(得分:0)
尝试此操作(将table_name
设置为您的表名称):
SET @row_count = 0;
SELECT (@row_count:=@row_count+1) AS totalSaves FROM table_name WHERE doc_date='2017-06-14'
第一行定义变量row_count
,并将其设置为0
。
第二行遍历数据库,查找日期为2017-06-14
的所有行,并为每一行增加row_count
。
然后,我们SELECT
将row_count
中存储的最终数字作为标记为totalSaves
的列中的一行。
将table_name
设置为您的表名称
答案 1 :(得分:0)
SELECT doc_date, sum(total_doc) AS total
FROM table_name
GROUP BY doc_date
使用您的表名更改table_name。
如果你只想要节目1日期:
SELECT doc_date, sum(total_doc) AS total
FROM table_name
WHERE doc_date = '2017-06-14'
GROUP BY doc_date
答案 2 :(得分:0)
SELECT
doc_date,
count(doc_date) AS saves
FROM documents
GROUP BY doc_date
ORDER BY doc_date ASC;
OR
SELECT
doc_date,
sum(total_doc) AS saves
FROM documents
GROUP BY doc_date
ORDER BY doc_date ASC;
<强>通知:强>
1)如果您使用的是第一个选项,则可以删除列total_doc
。这也是我的建议。您在doc_date
列中有一个很好的日期值mysql格式,因此您可以对其进行可靠的操作。
2)如果您愿意,可以按doc_date
按降序对记录进行排序。
3)在使用AS saves
或count
等函数时,不要忘记别名(就像我使用sum
所做的那样)。因为那样你也可以使用HAVING
过滤器。所以这样的事情 - 所有每天都有多次保存的文件:
SELECT
doc_date,
count(doc_date) AS saves
FROM documents
GROUP BY doc_date
HAVING saves > 1
ORDER BY doc_date ASC;
然后您还可以在指定日期仅过滤一个已保存的文档:
SELECT
doc_date,
count(doc_date) AS saves
FROM documents
WHERE doc_date = "2017-06-12"
GROUP BY doc_date
HAVING saves > 1
ORDER BY doc_date ASC;
4)或者,如果您愿意,也可以忽略HAVING
和doc_date
。这将为您提供在指定日期保存的文件。
SELECT count(doc_date) AS saves
FROM documents
WHERE doc_date = "2017-06-12"
GROUP BY doc_date
ORDER BY doc_date ASC;