当前位置: 首页 > 面试题库 >

每3行产生行号

艾照
2023-03-14
问题内容

我想每三行生成一个数字

CREATE TABLE #test(period INT)

INSERT INTO #test
VALUES      (602),(603),(604),(605),(606),(607),(608),(609)

我知道我们可以使用row_number窗口函数或while循环或cursor

SELECT period,
       ( Row_number()OVER(ORDER BY period) - 1 ) / 3 + 1
FROM   #test

结果;

+--------+-----+
| period | seq |
+--------+-----+
|    602 |   1 |
|    603 |   1 |
|    604 |   1 |
|    605 |   2 |
|    606 |   2 |
|    607 |   2 |
|    608 |   3 |
|    609 |   3 |
+--------+-----+

还有其他方法可以在 数学 上实现这一目标。两段之间没有任何间隙


问题答案:

一种数学或算术方法可以是使用周期数本身:

-- table init here
DECLARE @MIN_PERIOD INT = (SELECT MIN(period) FROM #test)

SELECT period,
       (period - @MIN_PERIOD) / 3 + 1 AS seq
FROM   #test

只要“两个期间之间没有任何间隔”仍然适用,该方法就起作用。

如果您需要WHERE主查询中的子句,请将其应用于SELECT MIN()查询。只要WHERE不引起时间间隔就可以正常工作。



 类似资料:
  • 数据库 默认情况下,Tendermint使用 syndtr/goleveldb 包作为其进程内键值数据库。不幸的是,LevelDB 的这个实现似乎在重载下受到了影响(参见#226)。最好安装 LevelDB 的真正 c 实现,并使用 make build_c 编译 Tendermint。有关详细信息,请参阅安装说明。 Tendermint 在 $TMROOT/data 中保存多个不同级别的 db

  • HTTP响应消息的响应状态行分为三部分:HTTP版本、状态码和状态信息,如下所示: HTTP/1.1 200 OK 其中HTTP版本可以是HTTP/1.1或HTTP/1.0,这由Web服务器所支持的HTTP版本决定。状态信息的内容和状态相关,如404状态码所对应的HTTP1.1规范中的状态信息是Not Found。由于HTTP版本一般是基本固定的,而状态信息是随着状态码的变化而变的。因此,在HTT

  • 我正在尝试生成android apk用于反应原生。通过https://facebook.github.io/react-native/docs/signed-apk-android.html#content给出的文档 1)生成密钥库 2) 设置 gradle 变量 3)将签名配置添加到应用程序的 gradle 配置 # 4) 生成签名 apk 以通过 android studio 发布 (buil

  • 问题内容: 这是一个扩展的一个问题,我问,并解决在计算器上这里。 我是BigQuery和SQL的新手,我想构建一个标准SQL查询,该查询将在X天的滚动时间内对事件进行分组和计数。我的数据表如下所示: 我正在跟踪网址上发生的事件。我想知道在X天的滚动时间内,每个事件在每个URL上发生了多少次。当我问这个问题时,我得到了一个很好的答案: 259200是3天,以秒为单位(3x24x3600)。据我了解,

  • 我想出一个例外: 在这个程序中,我尝试从hdfs路径读取记录,并将它们保存到Kafka中。问题是当我移除关于向Kafka发送记录的代码时,它运行得很好。我错过了什么?