выберите между 2 рядами каждой группы

0
-- phpMyAdmin SQL Dump
-- version 4.7.9
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Aug 03, 2018 at 12:20 PM
-- Server version: 10.1.31-MariaDB
-- PHP Version: 7.2.3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: 'items'
--

-- --------------------------------------------------------

--
-- Table structure for table 'tests'
--

CREATE TABLE 'tests' (
  'ID' int(4) NOT NULL,
  'SID' int(4) NOT NULL,
  'VID' int(4) NOT NULL,
  'Text' varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table 'tests'
--
ALTER TABLE 'tests'
  ADD PRIMARY KEY ('ID');

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table 'tests'
--
ALTER TABLE 'tests'
  MODIFY 'ID' int(4) NOT NULL AUTO_INCREMENT;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Я понял, но не знаю, как их совместить:

выберите между двумя строками:

SELECT
    MAX('VID')-3 AS max1,
    MAX('VID')-2 AS max2
FROM 'tests'
GROUP BY 'SID'

вернуть значение строк:

SELECT *
FROM 'tests'
WHERE 'VID'>='max1' AND 'VID'<='max2'
ORDER BY 'SID' ASC, 'VID' ASC

Результаты должны быть такими:

**Group:1**

test - 3

test - 4

**Group:2**

test - 283

test - 284

**Group:3**

test - 197

test - 198

**Group:4**

test - 173

test - 174

**Group:5**

test - 117

test - 118

**Group:6**

test - 162

test - 163

**Group:7**

test - 203

test - 204

**Group:8**

test - 72

test - 73

**Group:9**

test - 126

test - 127

**Group:10**

test - 106

test - 107
  • 2
    Было бы лучше опубликовать схему в виде текста. Люди могут не захотеть загружать файл из источника, о котором они не знают
  • 0
    это таблица с 6235 строками, как я могу опубликовать ее в виде текста?
Показать ещё 5 комментариев
Теги:
database
myisam

1 ответ

1
Лучший ответ

Вы можете присоединиться к своей таблице с агрегатами, заключенными в подзапрос:

    SELECT t.*
      FROM tests t
      JOIN (
                SELECT SID
                     , MAX(VID)-3 AS max1
                     , MAX(VID)-2 AS max2
                  FROM tests
              GROUP BY SID
           ) tagg
        ON tagg.SID = t.SID
     WHERE t.VID >= tagg.max1
       AND t.VID <= tagg.max2
  ORDER BY t.SID
         , t.VID
         ;
  • 0
    большое спасибо брат ♥

Ещё вопросы

Сообщество Overcoder
Наверх
Меню