【问题标题】:How to get week wise record in mysql from start to end date如何在mysql中获取从开始到结束日期的每周记录
【发布时间】:2012-03-05 16:30:11
【问题描述】:

我有一个名为weight 的表,字段为IDWEIGHTCREATED ON。我在 PHP 变量中也有 START 日期和 END 日期。现在我想获得从开始日期到结束日期的一周明智记录。
结果应该是这样的:

WEEK | WEIGHT | CREATED ON
-----+--------+-----------
1    |   50   | 2012-02-01
1    |   50   | 2012-02-03
1    |   50   | 2012-02-05
1    |   50   | 2012-02-07
2    |   50   | 2012-02-08
2    |   50   | 2012-02-10
2    |   50   | 2012-02-14
3    |   50   | 2012-02-15
3    |   50   | 2012-02-17
3    |   50   | 2012-02-17

如何实现?

【问题讨论】:

  • 检查更新 3 答案.. 它的工作原理和你想要的......

标签: mysql


【解决方案1】:

希望对你有帮助

SELECT ID, weigth, created_on, WEEK(created_on) week
FROM weight
WHERE created_on BETWEEN start_date AND end_date
ORDER BY week

【讨论】:

  • 瑜伽士没听,我是为你做的
【解决方案2】:

试试这个...

SELECT WEEKDAY(CREATED_ON)AS weekdays,weight,CREATED_ON
FROM weight
WHERE CREATED_on BETWEEN start_date AND end_date
GROUP BY weekdays 

【讨论】:

  • group by weekdays 不会得到 OP 想要的东西...我相信 GROUP BY 应该替换为 ORDER BY week...如果我错了请纠正我...
  • 但我无法得到确切的结果。我认为它在每月第二周的第一周显示,如果第二个月像这样盯着它显示的第 1 周和第 2 周再次显示。但我从开始到结束日期之间的 N 周数。我可以吗?
  • 2011-11-01 16:16:32.... 2012-01-17 16:16:32...我在第一周就度过了那些日子。但不对吗?
【解决方案3】:

试试下面

SELECT WEEKDAY(CREATED_ON) AS week, weight, created_on
FROM weight
WHERE CREATED_on BETWEEN start_date AND end_date
ORDER BY week

这应该给你你想要的......

更新 1

SELECT (SELECT COUNT(*) FROM myTable u2 
WHERE 
u2.date > u1.date) + 1 AS week, date FROM myTable u1
WHERE date between start_date AND end_date
ORDER BY week

更新 2

在下面的查询中,日期是我拥有的日期。

SELECT  (WEEK(date, 5) -
    WEEK(DATE_SUB(date, INTERVAL DAYOFMONTH(date) - 1 DAY), 5) + 1) as week, date
FROM myTable
WHERE date BETWEEN start_date AND end_date
ORDER BY week

更新 3

假设我有

myDate
+++++++++++++++++++++
2012-02-01 12:12:12
2012-02-01 12:12:12
2012-02-01 12:12:12
2012-02-03 12:12:12
2012-02-05 12:12:12
2012-02-07 12:12:12
2012-02-08 12:12:12
2012-02-08 12:12:12
2012-02-10 12:12:12
2012-02-14 12:12:12
2012-02-15 12:12:12
2012-02-17 12:12:12
2012-02-17 12:12:12
2012-03-01 12:12:12
2012-03-03 12:12:12
2012-03-05 12:12:12
2012-03-07 12:12:12

下面是我想要的。

week |myDate
+++++++++++++++++++++++++++
  1  |2012-03-07 12:12:12
  2  |2012-03-05 12:12:12
  3  |2012-03-03 12:12:12
  4  |2012-03-01 12:12:12
  5  |2012-02-17 12:12:12
  5  |2012-02-17 12:12:12
  6  |2012-02-15 12:12:12
  7  |2012-02-14 12:12:12
  8  |2012-02-10 12:12:12
  9  |2012-02-08 12:12:12
  9  |2012-02-08 12:12:12
  10 |2012-02-07 12:12:12
  11 |2012-02-05 12:12:12
  12 |2012-02-03 12:12:12
  13 |2012-02-01 12:12:12
  13 |2012-02-01 12:12:12
  13 |2012-02-01 12:12:12

要获得上述信息,请参阅下面的查询...

SELECT (SELECT COUNT(distinct u2.myDate) FROM myTable u2
WHERE 
u2.myDate > u1.myDate) + 1 AS week, myDate FROM myTable u1
WHERE 1=1
ordeR BY week

在您的情况下,WHERE 子句将是 WHERE myDate between startDate AND endDate

希望这是你想要的……终于!!!

祝你好运!!!

【讨论】:

  • 订购也很好,但我不能得到确切的结果。我认为它在每月第二周的第一周显示,如果第二个月像这样盯着它显示的第 1 周和第 2 周再次显示。是吗?但我想要从开始到结束日期之间的 N 周。我可以吗?
  • 2011-11-01 16:16:32.... 2012-01-17 16:16:32...我在第一周就度过了那些日子。但它不对吗?
  • 请看这个链接stackoverflow.com/questions/8878354/…看看排名是如何增加的..你需要做同样的一周......希望你得到......
  • 我上面的查询没有给你你想要的吗???它应该给...请您发布您在问题中得到的内容...我需要这个尽快...
  • week=1,weight=50,created_on=2011-11-01, and week=1,weight=50,created_on=2012-01-17 这个结果是我从那个查询中得到的。两个日期都不同,但它在第 1 周给出。
【解决方案4】:

如果您已经将开始和结束日期存储在 PHP 变量中,则可以使用 MySQL BETWEEN 关键字对表执行 SELECT 查询,因此(PHP 代码):

$query = "SELECT FROM weight WHERE `created on` BETWEEN '" . $start_date . "' AND '" . $end_date . "'";

我已经包含了上面的字符串引号 ('),因为我假设您已经将变量存储为 PHP 字符串,格式为日期时间,即 YYYY-MM-DD HH:MM:SS,使用 date() 格式:"Y-m-d H:i:s".

延伸阅读:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

【讨论】:

  • 首先感谢您的快速回复。正是我将开始日期和结束日期存储在这样的 php 变量中($start_date 和 $end_date)。但我如何获得每周明智的记录?如果我运行此查询 ($query = "SELECT FROM weight WHERE created on BETWEEN '" . $start_date . "' AND '" . $end_date . "'"; ) 我将获取 START 日期到 END 日期之间的所有记录.
  • 啊,我想我理解你 - 在 SO 的其他地方尝试这个答案:stackoverflow.com/questions/6661752/…
  • 这不会仅在日期之间按周获取记录。
【解决方案5】:

计算 START 日期和 CREATED ON 日期之间的差值(以天为单位),除以 7 并加 1 -- 如下所示:

SELECT
  DATEDIFF(CREATED_ON, START) / 7 + 1,
  WEIGHT,
  CREATED_ON
FROM
  weight
ORDER BY
  CREATED_ON

【讨论】:

  • 你会如何在 mysql 中做到这一点?请帮帮我。
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 2021-05-19
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多