выбирать в течение периода плюс последний до периода

Этот вопрос старый, но для всех, кто здесь, как и я, это мое решение, основанное на ответе Джареда:

self.img = QImage('fname.png')
pixmap = QPixmap(QPixmap.fromImage(self.img))
img_label = QLabel()
img_label.setPixmap(pixmap)
img_label.mousePressEvent = self.getPixel

def self.getPixel(self, event):
    x = event.pos().x()
    y = event.pos().y()
    c = self.img.pixel(x,y)  # color code (integer): 3235912
    # depending on what kind of value you like (arbitary examples)
    c_qobj = QColor(c)  # color object
    c_rgb = QColor(c).getRgb()  # 8bit RGBA: (255, 23, 0, 255)
    c_rgbf = QColor(c).getRgbf()  # RGBA float: (1.0, 0.3123, 0.0, 1.0)
    return x, y, c_rgb

Убедитесь, что размер метки соответствует размеру изображения, иначе координаты мыши x и y должны быть преобразованы в координаты изображения. И я думаю, что также возможно использовать метод .pixel() непосредственно на pixmap, но объект QImage, похоже, работает лучше в моем случае.

2
задан Gisela 13 July 2018 в 10:07
поделиться

5 ответов

Используя Lag и cte

with cte1 as (
  Select *, 
         lag(changed_date,1,'01-01-1900') over(partition by product_id order by changed_date) as FromDate 
  from price_history
), cte2 as  (
   Select product_id, max(FromDate) as changed_date 
   from cte1  
   where '2018-01-01' between FromDate and changed_date 
   group by product_id
)
Select p.* 
from price_history p 
  join cte2 c on p.product_id = c.product_id
where p.changed_date >= c.changed_date;
1
ответ дан a_horse_with_no_name 17 August 2018 в 13:19
поделиться
  • 1
    Благодаря! Это работает так, как ожидалось. – Gisela 13 July 2018 в 09:51

Решение с union все еще проще, но не реализовано правильно в других ответах. Итак:

SELECT * FROM price_history
      WHERE product_id in (1,2) AND changed_date >= '2018-01-01'
union all
(
  select distinct on (product_id)
    *
  from price_history
  where product_id in (1,2) AND changed_date < '2018-01-01'
  order by product_id, changed_date desc)
order by product_id, changed_date;

Демо

0
ответ дан Abelisto 17 August 2018 в 13:19
поделиться

Если у вас была возможность изменить структуру таблицы, другой подход заключался бы в том, чтобы в вашей таблице были как start_date, так и end_date, таким образом ваши записи не будут зависеть от предыдущей / следующей строки, и ваш запрос будет легче писать. См. Медленно меняя размер - Тип 2

Если вы хотите решить проблему с существующей структурой, в PostgresSQL вы можете использовать LIMIT 1 для получения последней записи перед изменением_даты:

SELECT 
    * 
FROM 
    price_history 
WHERE 
    product_id in (1,2) 
    AND changed_date >= '2018-01-01'
UNION ALL
-- this would give you the latest price before changed_date
SELECT 
    * 
FROM 
    price_history 
WHERE 
   product_id in (1,2) 
   AND changed_date < '2018-01-01'
ORDER BY
   changed_date DESC
LIMIT 1
0
ответ дан Hooman 17 August 2018 в 13:19
поделиться

Я думаю, это то, что вы ищете

SELECT Top 1 * FROM price_history WHERE product_id in (1,2) AND changed_date < 2018-01-01
UNION ALL
SELECT * FROM price_history WHERE product_id in (1,2) AND changed_date >= 2018-01-01
1
ответ дан zacs 17 August 2018 в 13:19
поделиться
  • 1
    Top 1 - синтаксис Sql Server, этот вопрос касается postgreSQL – Hooman 13 July 2018 в 10:38

Вам нужна первая дата изменения и вся другая дата> «2018-01-01»

 select product_id,price, changed_date
    from
    (
    select product_id,price, changed_date,
    row_number() over(partition by product_id order by changed_date ) as rn
    from price_history
    ) x
    where x.rn = 2 and product_id in (1,2);
union all
select product_id,price, changed_datefrom from price_history
where product_id in (1,2) and changed_date >= '2018-01-01'
0
ответ дан Zaynul Abadin Tuhin 17 August 2018 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: