我试图计算称为public function cursos_relacionados(){
return $this->belongsToMany('App\Model\Curso','cursos_has_cursos_relacionados','curso_id','curso_relacionado_id');
}
的单列中连续行的日期之间的天差。然后,我想将这些差异放入名为Expected_Results的新列中。
到目前为止,我有以下代码:
Date_col
以下是我要返回的内容:
DECLARE @datedifferences DATETIME
SET @datedifferences = (SELECT DATEDIFF(DAY, MIN(Date_col), MAX(Date_col)) FROM Schema.Table)
SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col = @datedifferences
ORDER BY Date_col
但是,查询成功运行,但未返回任何内容。我怀疑这是因为我缺少某种迭代行的循环。如何在查询中加入while循环以成功遍历行,以便查询显示预期结果?
答案 0 :(得分:1)
您是否认为这只是一种说法?因为不是。您有3条单独的语句:
DECLARE @datedifferences datetime;
SET @datedifferences = DATEDIFF(day, min(Date_col), max(Date_col));
SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col = @datedifferences
ORDER BY Date_col;
中间语句(SET...
)无法访问其下面的SELECT语句的FROM子句,因此它不了解您在其中引用的Date_col
。因此,Date_col
是中间语句中的无效列名。
答案 1 :(得分:0)
由于SET
部分(其中Date_Col
列是未知/不可访问的),您需要从类似的地方指定
DECLARE @datedifferences datetime;
SET @datedifferences = (SELECT DATEDIFF(day, min(Date_col), max(Date_col)) FROM Database.Schema.Table);
SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col = @datedifferences
ORDER BY Date_col;
现在, DATEDIFF()
函数将返回INT
数据类型,并将您的@datedifferences
声明为DATETIME
数据类型。
这是第一次,因此您无法在WHERE
子句中使用它进行比较,因为我不希望将DATETIME
与INT
进行比较,这意味着即使您更改了变量的数据类型为INT
,这部分查询将不起作用
WHERE Date_col = @datedifferences
现在,根据您的代码,我认为您希望从表中选择Date_Col
和MAX()
之间的MIN()
,其中DECLARE @MaxDate DATETIME = (SELECT MAX(Date_Col) FROM Database.Schema.Table);
DECLARE @MinDate DATEIME = (SELECT MIN(Date_Col) FROM Database.Schema.Table);
SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col BETWEEN @MaxDate AND @MinDate
ORDER BY Date_col;
的日期可能是>
SELECT DATEDIFF(Day, MIN(Date_Col), MAX(Date_Col)) As Def
FROM
(
SELECT TOP 100 Date_Col
FROM Database.Schema.Table
ORDER BY Date_Col
) T;
更新:
我只想计算date_col中前100行的date_diffs
type="button"