在每组的2行之间进行选择

ws51t4hk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(319)
  1. -- phpMyAdmin SQL Dump
  2. -- version 4.7.9
  3. -- https://www.phpmyadmin.net/
  4. --
  5. -- Host: 127.0.0.1
  6. -- Generation Time: Aug 03, 2018 at 12:20 PM
  7. -- Server version: 10.1.31-MariaDB
  8. -- PHP Version: 7.2.3
  9. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  10. SET AUTOCOMMIT = 0;
  11. START TRANSACTION;
  12. SET time_zone = "+00:00";
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8mb4 */;
  17. --
  18. -- Database: `items`
  19. --
  20. -- --------------------------------------------------------
  21. --
  22. -- Table structure for table `tests`
  23. --
  24. CREATE TABLE `tests` (
  25. `ID` int(4) NOT NULL,
  26. `SID` int(4) NOT NULL,
  27. `VID` int(4) NOT NULL,
  28. `Text` varchar(20) NOT NULL
  29. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  30. --
  31. -- Indexes for dumped tables
  32. --
  33. --
  34. -- Indexes for table `tests`
  35. --
  36. ALTER TABLE `tests`
  37. ADD PRIMARY KEY (`ID`);
  38. --
  39. -- AUTO_INCREMENT for dumped tables
  40. --
  41. --
  42. -- AUTO_INCREMENT for table `tests`
  43. --
  44. ALTER TABLE `tests`
  45. MODIFY `ID` int(4) NOT NULL AUTO_INCREMENT;
  46. COMMIT;
  47. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  48. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  49. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

我知道了,但我不知道怎么把它们搭配起来:
在两行之间选择:

  1. SELECT
  2. MAX(`VID`)-3 AS max1,
  3. MAX(`VID`)-2 AS max2
  4. FROM `tests`
  5. GROUP BY `SID`

返回行的值:

  1. SELECT *
  2. FROM `tests`
  3. WHERE `VID`>='max1' AND `VID`<='max2'
  4. ORDER BY `SID` ASC, `VID` ASC

结果应该是这样的:

  1. **Group:1**
  2. test - 3
  3. test - 4
  4. **Group:2**
  5. test - 283
  6. test - 284
  7. **Group:3**
  8. test - 197
  9. test - 198
  10. **Group:4**
  11. test - 173
  12. test - 174
  13. **Group:5**
  14. test - 117
  15. test - 118
  16. **Group:6**
  17. test - 162
  18. test - 163
  19. **Group:7**
  20. test - 203
  21. test - 204
  22. **Group:8**
  23. test - 72
  24. test - 73
  25. **Group:9**
  26. test - 126
  27. test - 127
  28. **Group:10**
  29. test - 106
  30. test - 107
oaxa6hgo

oaxa6hgo1#

您可以使用 Package 在子查询中的聚合联接表:

  1. SELECT t.*
  2. FROM tests t
  3. JOIN (
  4. SELECT SID
  5. , MAX(VID)-3 AS max1
  6. , MAX(VID)-2 AS max2
  7. FROM tests
  8. GROUP BY SID
  9. ) tagg
  10. ON tagg.SID = t.SID
  11. WHERE t.VID >= tagg.max1
  12. AND t.VID <= tagg.max2
  13. ORDER BY t.SID
  14. , t.VID
  15. ;

相关问题