mysql - 比较日期同一列 mySQL Laravel

标签 mysql sql laravel-4

我有一个“任务”表,如下所示: enter image description here

我需要计算每条记录的开始日期偏移量;我需要计算每条记录的开始日期是在最小/最低开始日期之后多少天。

我在 Laravel 4 中执行此操作。表是 mySQL。我真的更喜欢 Laravel 查询,但我可能还可以包含原始 mySQL。

我的查询(它也选择其他一些东西)不起作用

    $tasks = DB::table('tasks')->select(array(DB::raw("TIMESTAMPDIFF(DAY, MIN(start), start) AS offset"), DB::raw("TIMESTAMPDIFF(DAY, start, end) AS length"), 'user_id', 'name', 'desc','start','end','finished'))->where('temp_id', $id)->orderBy('start')->get();

self 比较的“MIN(start)”似乎是问题所在。如何计算每条记录的开始日期是最短开始日期之后的多少天?

最佳答案

我看到两种可能的解决方案来解决在非聚合结果集上错误使用 MIN(start) 的问题。

选项一:保存最小日期的变量并在查询中使用它:

$min_date = DB::table("tasks")->selectRaw("id, MIN(start) AS min")->groupBy("id")->first();
echo $min_date->min; // 2015-08-15 00:00:00, assuming my syntax was correct.

$tasks = DB::table('tasks')
->select(array(DB::raw("TIMESTAMPDIFF(DAY, ".$min_date->min.", start) AS offset"), DB::raw("TIMESTAMPDIFF(DAY, start, end) AS length"), 'user_id', 'name', 'desc','start','end','finished'))
->where('temp_id', $id)
->orderBy('start')
->get();

选项二:在选择中使用子查询:

$tasks = DB::table('tasks')
->select(array(DB::raw("TIMESTAMPDIFF(DAY, (SELECT MIN(start) FROM tasks), start) AS offset"), DB::raw("TIMESTAMPDIFF(DAY, start, end) AS length"), 'user_id', 'name', 'desc','start','end','finished'))
->where('temp_id', $id)
->orderBy('start')
->get();

关于MIN()用法的注意事项:它可以在不聚合结果的情况下使用,但仅返回单行,除非在子查询中使用。

示例:

SELECT start FROM tasks; /*6 Rows*/
SELECT MIN(start) FROM tasks; /*1 Row*/
SELECT MIN(start), start FROM tasks; /*1 Row*/
SELECT (SELECT (MIN(start) FROM tasks) AS min_start, start FROM tasks; /*6 Rows*/

最后一个示例将返回每行的结果以及在 tasks 中找到的最小 start。希望这有助于解决您的问题。选项 1 或选项 2 应该有所帮助,但请在您需要其他帮助时发表评论。

关于mysql - 比较日期同一列 mySQL Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32055189/

相关文章:

mysql - 复合索引和整数比较

mysql - SQL 列出所有重复项

c# - 如何在 Entity Framework 中级联删除?

python - Postgresql ON CONFLICT 在 sqlalchemy 中

javascript - 如何设置导航栏的事件状态?

php - 如何在具有指定键的元素之后插入 Laravel 集合中的元素?

java - clojure 中的 MySQL 枚举数据类型访问

mysql - Fluent Nhibernate 和 MySql 不能一起玩

sql - 对 SQL Select 的结果进行分组

php - Laravel 中的 Blade 模板与纯 PHP