mysql - SQL Server 默认值 x 行的平均值

标签 mysql sql sql-server average database-migration

我在 MySQL 上运行了以下触发器:

CREATE DEFINER=`root`@`%` TRIGGER `before_insert` BEFORE INSERT ON `table` FOR EACH ROW SET
new.AVG_COLUMN1 = (SELECT avg(COLUMN1) FROM (SELECT COLUMN1 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN1_A), 
new.AVG_COLUMN2 = (SELECT avg(COLUMN2) FROM (SELECT COLUMN2 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN2_A), 
new.AVG_COLUMN3 = (SELECT avg(COLUMN3) FROM (SELECT COLUMN3 from table ORDER BY DateTimeCol DESC LIMIT 20) as COLUMN3_A)

基本上,我的目标是在插入新行时根据 COLUMNx 中的最后 20 个条目在 AVG_COLUMNx 列中设置一个自动默认值。使用提到的触发器,这在 MySQL 中工作正常。

我正在将我的项目从 MS 迁移到 Sql Server Express,我正尝试在那里做同样的事情。有没有人对我如何做到这一点有任何好的建议?使用触发器、计算列等?

感谢任何输入!

最佳答案

SQL Server 中的逻辑会有所不同,因为它会使用 inserted 而不是 new。基本上:

update t
    set AVG_ROW1 = tt.avg1, 
        AVG_ROW2 = tt.avg2, 
        AVG_ROW3 = tt.avg3
    from table t join
         inserted i
         on i.pk = t.pk outer apply
         (select avg(Row1) as avg1, avg(Row2) as avg2, avg(Row3) as avg3
          from (select top 20 t.*
                from table t
                order by DateTimeRow desc
               ) t
         ) tt;

您需要行中的一些标识符来匹配要inserted 的表。这就是 pk 的含义。

关于mysql - SQL Server 默认值 x 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556367/

相关文章:

python - 在 Python 中以 HTML 形式发送 MySQL 查询

java - 注释ManyToMany唯一关键问题

MySQL:复合索引与多个索引(最左边的索引前缀)

mysql - 创建表而不预先定义列数

java - 无法解析的日期异常 Windows Azure 移动服务

mysql - 从另一个表插入表,但如果已存在则更新

sql-server - 如何使用 SSIS 通过 foreach 循环容器调整记录集中的变量类型

php - 哪个最不密集 - 在 PHP 或 MySQL 中计算唯一时间?

c# - SQL Server 2012 升级 : StackOverflowException with ExecuteReader()

php - PHP mssql_query 中的限制?