【问题标题】:SQL Select Statement for last entry in a dynamic table动态表中最后一个条目的 SQL Select 语句
【发布时间】:2014-07-28 17:41:54
【问题描述】:

我有一个允许编辑此数据表的表单。当某些字段被编辑时,我需要它自动在另一个数据库中创建一个条目(我已经弄清楚了那部分)。 not 必须包含变量在编辑之前是什么以及变量已被编辑为什么(即“用户的电子邮件已从 something@somewhere.com 更改为某处@something.com”)。

通过下面的语句,我试图从上一个条目中提取信息,以便能够显示该变量已更改为什么。 StartDate 是日期/时间变量,是唯一可用于拉取时间条目的变量。

SELECT Top 1 *    
FROM [Table].[dbo].[Users]
WHERE TRACK_Num = <cfqueryparam value="#form.ID#" cfsqltype="cf_sql_integer">
ORDER BY StartDate DESC

这种方法的主要问题是它总是会选择相同的条目,而不是选择通过表单创建的新条目。

注意:我已编辑条目以包含更多详细信息。谢谢你的帮助。

【问题讨论】:

  • 您的查询看起来不错,只是缺少查询参数。您是说无论您提交什么 id 都会获得相同的曲目编号?
  • StartDate 是正确的日期/时间数据类型吗?
  • 丹,是的,但让我尝试进一步解释。如果查询在当前 ID 为 111 时执行,然后创建了一个创建 ID 112 的条目,则下次运行查询时它将继续选择 111。Goat StartDate 是数据库中的一个变量
  • StartDate 实际上是日期时间类型,还是只是日期?如果只是日期并且条目是在同一天创建的,我认为您可能会得到一些“错误”的结果。我会添加 ORDER BY StartDate DESC, ID DESC
  • @SinceForever - 是的,我明白这一点。我的问题是关于你用简单英语的最终目标。如果您这样做的原因是生成某种历史表,则可能有更简单的方法。至于为什么您没有获得当前查询的最后一个条目,我们需要更多信息。虽然该方法并不理想,但您所描述的应该在理论上可行。虽然它不是线程安全的。

标签: sql select coldfusion sql-order-by


【解决方案1】:

如果您的字段是日期,而不是日期时间,如果您在同一天内有多个条目,您将面临问题。

按 StartDate DESC 和 ID DESC 排序应该可以解决这个问题。

【讨论】:

    【解决方案2】:

    如果我没记错的话,那么您正在考虑获取表的最后插入的 id。

    declare @newID int 
    insert into table (fields) values (values)
    set @newID = scope_Identity(); // gets the latest inserted id.
    select @newID
    

    注意:ID 字段的身份规范必须为 true。

    现在你可以查询为:

    SELECT Top 1 *    
    FROM [Table].]dbo].[Users]
    WHERE TRACK_Num = @newID
    ORDER BY StartDate DESC
    

    【讨论】:

    • 我知道您要做什么,但我认为这与新 ID(正在提交的 ID)无关,而是指提交前最新的 ID .
    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2020-07-27
    • 2013-07-18
    • 2013-06-14
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多