Select语句,用于计算sql中时间戳的匹配日期(而不是时间)

时间:2014-03-21 20:59:57

标签: php mysql sql

我不想将它们组合或分组。我只想计算给定表中有多少日期(不是小时/分钟/秒)匹配,然后使用php突出显示简单日历上的给定日期。 (因此突出显示有两个以上条目的日子。)

我无法弄清楚这句话。这是我尝试过的一个例子。我拉了一些行,但它不是100%。

    SELECT * 
    FROM `foo_table` 
    WHERE DAY(`start`) IN
    (
        SELECT DAY(`start`)         
        FROM `foo_table`
        WHERE MONTH(`start`) IN (01) 
        AND MONTH(`end`) IN (01) 
        GROUP BY `start` 
        HAVING COUNT(*) > 1 
    )
    ORDER BY `start`

这是表格:

    id          start                      end
    1    2014-01-01 10:00:00       2014-01-02 10:00:00
    2    2014-01-02 10:00:00       2014-01-04 10:00:00
    3    2014-01-03 10:00:00       2014-01-06 10:00:00
    4    2014-02-01 10:00:00       2014-02-02 10:00:00
    5    2014-02-01 10:00:00       2014-02-02 10:00:00
    6    2014-10-01 10:00:00       2014-10-19 10:00:00

我希望语句显示以查询: 1月3日独特的条目。 2月2日匹配的条目。 等等。

当给定的一天有一个,两个或三个条目时,我使用php来更改日历的字体。我似乎无法弄清楚如何找出条目数量以及哪些日期。

2 个答案:

答案 0 :(得分:0)

如果我正确理解你,那么这样的事情对你有用:

SELECT DAY(`start`), COUNT(*) 
FROM foo_table 
WHERE DATE_FORMAT(`start`, "%Y-%m") = '2014-03' 
GROUP BY 1;

这会返回类似于:

的内容
+-----------+----------+
|         1 |      266 |
|         2 |      260 |
|         3 |      304 |
|         4 |      298 |
|         5 |      251 |
|         6 |      293 |
|         7 |      310 |
|         8 |      243 |
|         9 |      248 |
|        10 |      288 |
|        11 |      290 |
|        12 |      245 |
|        13 |      315 |
|        14 |      333 |
|        15 |      298 |
|        16 |      268 |
|        17 |      282 |
|        18 |      245 |
|        19 |      252 |
|        20 |      293 |
|        21 |       63 |
+-----------+----------+

答案 1 :(得分:0)

您的子查询需要按date(start)分组:

SELECT * 
FROM `foo_table` 
WHERE DATE(`start`) IN (SELECT DATE(`start`)         
                        FROM `foo_table`
                        WHERE MONTH(`start`) IN (01) AND MONTH(`end`) IN (01) 
                        GROUP BY DATE(`start`)
--------------------------------^
                        HAVING COUNT(*) > 1 
                      )
ORDER BY `start`;

但是,从您的描述中可以看出,子查询的输出似乎已足够,因为它可以识别具有多个条目的日期。