sql中如何获取序列号的范围?
我有一个表,其中有一个名为扇区的字段,每个扇区通常类似于 1、2、3、4、5、6、7 等。
我想显示应用程序中的可用扇区,我认为显示所有 1,2,3,4,5,6,7 很愚蠢,所以我应该显示“1 到 7”。
问题是有时扇区会跳过一个数字,例如 1、2、3、5、6、7。 所以我想显示类似 1 到 3、5 到 7 的内容。
我如何在 sql 中查询它以在我的应用程序中显示?
I have a table with a field called sector, each sector is usually something like 1,2,3,4,5,6,7,etc.
I want to show available sectors in an application, I thought that showing all 1,2,3,4,5,6,7 is dumb so I should show "1 to 7" instead.
The problem is that sometimes the sectors skip one number like this 1,2,3, 5,6,7.
So I want to show something like 1 to 3, 5 to 7.
how could I query this in sql to show in my app?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
某些 DBMS 可能具有一些 OLAP 功能,可以轻松编写此类查询,但 IBM Informix Dynamic Server (IDS) 尚不具备此类功能。
为了具体起见,我们假设您的表名为“ProductSectors”,其结构如下:
您在特定 ProductID 中查找的是 Sector 的最小和最大连续值的列表。当不存在比最小值小一的值和不比最大值大一的值且范围内不存在间隙时,范围是连续的。这是一个复杂的查询:
这里是使用示例数据的整个查询的跟踪:
以及一些具有各种间隙的示例数据:
所需的输出 - 也是实际的输出:
MacOS X 10.6.2,IDS 11.50.FC4W1,SQLCMD 86.04。
Some DBMS might have some OLAP functionality that makes it easy to write such queries, but IBM Informix Dynamic Server (IDS) does not yet have such functions.
Let's assume, for sake of concreteness, that your table is called 'ProductSectors' and has a structure like:
What you are seeking within a particular ProductID is a list of the minimum and maximum contiguous values of Sector. A range is contiguous when there is no value one smaller than the minimum and no value one bigger than the maximum and there is no gap within the range. This is a complex query:
And here is a trace of the overall query working with sample data:
And some sample data, with various gaps:
Required output - also the actual output:
With the expected results on MacOS X 10.6.2, IDS 11.50.FC4W1, SQLCMD 86.04.
这在sql中称为“间隙”。这是一篇详细的文章“文章”
This is called "Gaps" in sql. Here is a detailed article "Article"
好的,我一直在深入研究并发现 这
它有效:),希望它能帮助别人,就像它帮助我一样。
ok, I have been looking deeper and found this
It works :), hope it helps someone as it helped me.